masalah kegagalan kekangan MySQL CHECK
Apabila mentakrifkan jadual pangkalan data, adalah penting untuk menambah kekangan untuk memastikan integriti data. Kekangan CHECK membolehkan anda menentukan syarat yang mesti dipenuhi oleh nilai lajur tertentu. Walau bagaimanapun, dalam MySQL 8.0.15 dan lebih awal, kekangan CHECK tidak dikuatkuasakan, yang merupakan kes khas.
Contoh:
<code class="language-sql">CREATE TABLE Customer ( SD integer CHECK (SD > 0), Last_Name varchar (30), First_Name varchar(30) );</code>
Selepas membuat jadual ini, cuba masukkan baris dengan nilai SD negatif:
<code class="language-sql">INSERT INTO Customer values ('-2', 'abc', 'zz');</code>
MySQL tidak akan melaporkan ralat, walaupun nilai yang dimasukkan melanggar kekangan CHECK yang ditentukan. Ini kerana menurut Manual Rujukan MySQL:
<code>CHECK子句会被解析,但所有存储引擎都会忽略它。</code>
Penyelesaian:
Untuk menyelesaikan isu ini, anda boleh melakukan salah satu daripada yang berikut:
<code class="language-sql">mysql> delimiter // mysql> 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 -> // mysql> delimiter ;</code>
Sila ambil perhatian bahawa contoh pencetus di atas menetapkan nilai SD nombor negatif kepada 0, anda boleh mengubah suai logik pencetus mengikut keperluan sebenar anda.
Atas ialah kandungan terperinci Mengapa Kekangan CHECK MySQL Gagal dalam Versi Sebelum 8.0.16?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!