Sayangnya MySQL tidak mendukung kendala pemeriksaan SQL. Anda bisa mendefinisikannya dalam permintaan DDL Anda untuk alasan kompatibilitas tetapi mereka hanya diabaikan.
Ada alternatif sederhana
Anda bisa membuat BEFORE INSERT
dan BEFORE UPDATE
memicu yang menyebabkan kesalahan atau mengatur bidang ke nilai default ketika persyaratan data tidak terpenuhi.
Contoh untuk BEFORE INSERT
bekerja setelah MySQL 5.5
DELIMITER $$
CREATE TRIGGER `test_before_insert` BEFORE INSERT ON `Test`
FOR EACH ROW
BEGIN
IF CHAR_LENGTH( NEW.ID ) < 4 THEN
SIGNAL SQLSTATE '12345'
SET MESSAGE_TEXT := 'check constraint on Test.ID failed';
END IF;
END$$
DELIMITER ;
Sebelum ke MySQL 5.5 Anda harus menyebabkan kesalahan, misalnya memanggil prosedur yang tidak ditentukan.
Dalam kedua kasus ini menyebabkan kemunduran transaksi implisit. MySQL tidak mengizinkan pernyataan ROLLBACK itu sendiri di dalam prosedur dan pemicu.
Jika Anda tidak ingin mengembalikan transaksi (INSERT / UPDATE harus lulus bahkan dengan "periksa kendala" gagal Anda dapat menimpa nilai menggunakan SET NEW.ID = NULL
yang akan mengatur id ke nilai default bidang, tidak benar-benar masuk akal untuk id tho
Sunting:
Menghapus kutipan nyasar.
Mengenai :=
operator:
Berbeda dengan itu =
, :=
operator tidak pernah diartikan sebagai operator pembanding. Ini berarti Anda dapat menggunakan :=
dalam pernyataan SQL yang valid (tidak hanya dalam pernyataan SET) untuk menetapkan nilai ke variabel.
https://dev.mysql.com/doc/refman/5.6/id/assignment-operators.html
Mengenai kutipan pengidentifikasi backtick:
Karakter kutipan pengidentifikasi adalah backtick ("` ")
Jika ANSI_QUOTES SQL mode diaktifkan, itu juga diizinkan untuk mengutip pengidentifikasi dalam tanda kutip ganda
http://dev.mysql.com/doc/refman/5.6/en/identifiers.html