Pertama saya membuat tabel seperti
CREATE TABLE Customer (
SD integer CHECK (SD > 0),
Last_Name varchar (30),
First_Name varchar(30)
);
dan kemudian memasukkan nilai dalam tabel itu
INSERT INTO Customer values ('-2','abc','zz');
MySQL tidak menunjukkan kesalahan, ia menerima nilai.
mysql
check-constraints
JohnRaja
sumber
sumber
Jawaban:
MySQL 8.0.16 adalah versi pertama yang mendukung kendala CHECK.
Baca https://dev.mysql.com/doc/refman/8.0/en/create-table-check-constraints.html
Jika Anda menggunakan MySQL 8.0.15 atau lebih lama, Manual Referensi MySQL mengatakan:
Coba pemicu ...
Semoga itu bisa membantu.
sumber
CHECK
kendala yang ditentukan. Ahhh, itu terlalu mudah ...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
danBEFORE UPDATE
memicu yang menyebabkan kesalahan atau mengatur bidang ke nilai default ketika persyaratan data tidak terpenuhi.Contoh untuk
BEFORE INSERT
bekerja setelah MySQL 5.5Sebelum 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 thoSunting: Menghapus kutipan nyasar.
Mengenai
:=
operator:https://dev.mysql.com/doc/refman/5.6/id/assignment-operators.html
Mengenai kutipan pengidentifikasi backtick:
http://dev.mysql.com/doc/refman/5.6/en/identifiers.html
sumber
DELIMITER
?CHECK
kendala diabaikan oleh MySQL seperti yang dijelaskan dalam komentar sangat kecil dalam dokumen:CREATE TABLE
sumber
CHECK
kendala yang benar, jikaCHECK
dievaluasiFALSE
maka penyisipan (atau pembaruan) tidak dilakukan dan kesalahan terjadi.The
CHECK
kendala tampaknya tidak diterapkan di MySQL.Lihat laporan bug ini: https://bugs.mysql.com/bug.php?id=3464
sumber
Seperti disebutkan oleh joanq MariaDB sekarang tampaknya mendukung PERIKSA kendala di antara barang lainnya:
"Dukungan untuk CHECK CONSTRAINT ( MDEV-7563 )."
https://mariadb.com/kb/en/mariadb/mariadb-1021-release-notes/
sumber
Periksa kendala didukung pada versi 8.0.15 (belum dirilis)
https://bugs.mysql.com/bug.php?id=3464
sumber
Perbarui ke MySQL 8.0.16 untuk menggunakan
checks
:MySQL Periksa Dokumentasi
sumber
coba dengan
set sql_mode = 'STRICT_TRANS_TABLES'
ATAUSET sql_mode='STRICT_ALL_TABLES'
sumber
CHECK
kendala