Memahami Gelagat Kekangan CHECK dalam MySQL
Pengendalian MySQL terhadap kekangan CHECK kadangkala tidak dijangka. Kekangan CHECK mungkin kelihatan tidak aktif, walaupun ditakrifkan dengan betul. Perkara utama ialah memahami keserasian versi MySQL.
MySQL 8.0.16 ialah versi pertama yang menyokong sepenuhnya kekangan CHECK. Jika versi MySQL anda lebih lama daripada 8.0.16, klausa CHECK
akan dihuraikan tetapi diabaikan oleh semua enjin storan. Data yang melanggar kekangan akan dimasukkan tanpa ralat.
Rujuk Manual Rujukan MySQL rasmi (https://www.php.cn/link/e6c19a87ef9e816e02ce247d4f41d38a) untuk mengesahkan keupayaan versi MySQL anda.
Alternatif untuk SEMAK Kekangan (untuk versi MySQL yang lebih lama):
Jika versi MySQL anda tidak mempunyai sokongan kekangan CHECK, pertimbangkan untuk menggunakan pencetus. Pencetus melaksanakan kod tersuai sebagai tindak balas kepada peristiwa pangkalan data seperti sisipan baris. Pencetus boleh mengesahkan data sebelum memasukkan, memastikan integriti data.
Sebagai contoh, pencetus untuk menguatkuasakan nilai bukan negatif untuk medan SD
dalam jadual Customer
boleh jadi:
<code class="language-sql">DELIMITER // CREATE TRIGGER trig_sd_check BEFORE INSERT ON Customer FOR EACH ROW BEGIN IF NEW.SD < 0 THEN SET NEW.SD = 0; END IF; END // DELIMITER ;</code>
Pencetus ini memintas INSERT
pernyataan pada jadual Customer
. Jika SD
negatif, pencetus menetapkannya kepada sifar. Ini menyediakan kefungsian yang serupa dengan kekangan CHECK
.
Atas ialah kandungan terperinci Mengapa Kekangan CHECK MySQL Saya Tidak Berfungsi?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!