Menerokai Kebolehlaksanaan Emulasi Kekangan CHECK Berasaskan Pencetus dalam MySQL
MySQL tidak mempunyai sokongan terbina dalam untuk kekangan CHECK, memberikan cabaran untuk menguatkuasakan konsistensi data. Akibatnya, penyelesaian alternatif telah dicari, termasuk penggunaan pencetus. Walau bagaimanapun, pendekatan berasaskan pencetus biasa sering menggunakan menetapkan nilai lalai dan bukannya memberi isyarat ralat.
Bolehkah Pencetus Meniru Kekangan SEMAK dengan Pengendalian Ralat?
Timbul persoalan sama ada ia adalah mungkin untuk membina pencetus yang mengembalikan ralat apabila melanggar syarat tertentu, dengan berkesan mensimulasikan tingkah laku CHECK kekangan. Jawapannya sememangnya afirmatif.
Untuk kemas kini data, pencetus seperti berikut boleh digunakan:
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 beroperasi sebelum operasi kemas kini dan menyemak sama ada medan "bulan" melebihi 12. Jika ya, ia mencetuskan ralat dengan SQLSTATE dan mesej yang ditentukan.
Begitu juga, untuk data sisipan, pencetus seperti ini boleh digunakan:
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; $
Pencetus ini bertindak sebagai penguatkuasa berkesan kekangan CHECK yang diingini, mengembalikan ralat sekiranya berlaku pelanggaran kekangan, sama seperti kekangan CHECK asli.
Atas ialah kandungan terperinci Bolehkah Pencetus Meniru CHECK Kekangan dengan Pengendalian Ralat dalam MySQL?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!