Bolehkah Pencetus MySQL Meniru Kekangan CHECK?
Kekangan CHECK ialah ciri berguna dalam sistem RDBMS lain yang membenarkan penguatkuasaan syarat tertentu pada nilai lajur. Walau bagaimanapun, MySQL tidak menyokong kekangan CHECK secara asli. Ini menimbulkan cabaran bagi pembangun yang ingin melaksanakan fungsi yang serupa.
Satu penyelesaian berpotensi untuk isu ini ialah menggunakan pencetus MySQL. Pencetus ialah objek pangkalan data yang melakukan tindakan khusus apabila peristiwa tertentu berlaku, seperti memasukkan, mengemas kini atau memadam data daripada jadual. Dengan mencipta pencetus, anda boleh menentukan satu set syarat yang harus dipenuhi sebelum operasi di atas meja boleh dilaksanakan.
Mengembalikan Ralat dengan Pencetus
Walaupun pencetus boleh digunakan untuk menetapkan nilai lalai untuk medan, ia juga mungkin untuk membina pencetus yang mengembalikan ralat jika syarat tidak dipenuhi. Ini membolehkan kita mensimulasikan gelagat kekangan CHECK.
Sebagai contoh, mari buat pencetus yang menyemak lajur bulan jadual statistik dan melemparkan ralat jika nilainya lebih besar daripada 12. Tingkah laku ini meniru SEMAK kekangan:
Untuk INSERT operasi:
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; $$
Untuk operasi KEMASKINI:
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; $$
Dengan menggunakan pencetus ini, kami boleh mencipta kekangan SEMAK pengganti dalam MySQL dan menguatkuasakan syarat yang kami kehendaki pada lajur bulan sebelum sebarang operasi INSERT atau UPDATE dilakukan.
Atas ialah kandungan terperinci Bolehkah Pencetus MySQL Meniru Gelagat Kekangan CHECK?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!