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!