Rumah  >  Artikel  >  pangkalan data  >  Bolehkah MySQL Triggers Mimic CHECK Constraints?

Bolehkah MySQL Triggers Mimic CHECK Constraints?

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-11-17 15:42:02700semak imbas

Can MySQL Triggers Mimic CHECK Constraints?

Bolehkah MySQL Trigger Mencontohi Kekangan CHECK?

Tidak seperti RDBMS lain, MySQL tidak menyokong sepenuhnya kekangan CHECK. Walau bagaimanapun, ia menawarkan pencetus sebagai alternatif. Pencetus konvensional menetapkan nilai lalai dan bukannya mengembalikan ralat, menyebabkan pengguna tertanya-tanya sama ada mungkin untuk mencipta pencetus yang menguatkuasakan syarat dan mengembalikan ralat seperti kekangan CHECK.

Mencipta Pencetus Pembalik Ralat

Jawapannya ya. Begini cara untuk membina pencetus sedemikian:

Untuk Operasi Kemas Kini:

DELIMITER $$
CREATE TRIGGER chk_stats1 BEFORE UPDATE ON stats
FOR EACH ROW
BEGIN
  IF NEW.month > 12 THEN
    SIGNAL SQLSTATE '45000';
    SET MESSAGE_TEXT = 'Cannot add or update row: only';
  END IF;
END;
$$

Pencetus ini memintas percubaan kemas kini pada jadual 'statistik'. Jika nilai 'bulan' dalam data baharu melebihi 12, ia menimbulkan ralat SQLSTATE dan menetapkan mesej ralat yang bermakna.

Untuk Operasi Sisipan:

DELIMITER $$
CREATE TRIGGER chk_stats BEFORE INSERT ON stats
FOR EACH ROW
BEGIN
  IF NEW.month > 12 THEN
    SIGNAL SQLSTATE '45000';
    SET MESSAGE_TEXT = 'Cannot add or update row: only';
  END IF;
END;
$$

Begitu juga, pencetus ini menyemak nilai 'bulan' sebelum memasukkan data ke dalam 'statistik' jadual.

Mencontohi Kekangan CHECK

Pencetus ini secara berkesan meniru kekangan CHECK dengan menguatkuasakan julat 'bulan'. Sebarang percubaan untuk mengemas kini atau memasukkan data dengan nilai 'bulan' lebih daripada 12 mencetuskan ralat. Ini membolehkan integriti data dengan menghalang nilai tidak sah daripada disimpan dalam pangkalan data.

Atas ialah kandungan terperinci Bolehkah MySQL Triggers Mimic CHECK Constraints?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn