Batasan CHECK digunakan untuk menegakkan kondisi tertentu pada nilai kolom atau kombinasi kolom dalam tabel. Hanya nilai yang memenuhi batasan tersebut yang dapat ditambahkan ke tabel melalui operasi insert atau update.
Versi yang didukung
Versi mesin basis data adalah MySQL 8.0, dan versi instansinya adalah polardb-2.5.0_5.4.20-20241224_xcluster8.4.20-20241213 atau yang lebih baru.
Untuk informasi lebih lanjut tentang versi instansi, lihat Catatan Rilis.
Untuk informasi lebih lanjut tentang cara melihat versi instansi, lihat Lihat dan Perbarui Versi Instansi.
Sintaksis
[CONSTRAINT [symbol]] CHECK (expr) [[NOT] ENFORCED]Sintaksis ini sama dengan batasan CHECK yang disediakan oleh MySQL. Untuk informasi lebih lanjut, lihat Batasan CHECK.
Parameter:
Parameter | Deskripsi |
CONSTRAINT [symbol] | Nama batasan. Jika Anda tidak menentukan nama, sistem akan secara otomatis menghasilkannya dalam format |
CHECK (expr) | Kondisi batasan. |
[NOT] ENFORCED | Menentukan apakah akan menonaktifkan batasan CHECK. Secara default, batasan CHECK diaktifkan. |
Contoh
Tambahkan batasan CHECK
PolarDB-X memungkinkan Anda menggunakan pernyataan CREATE TABLE dan ALTER TABLE untuk menambahkan batasan CHECK pada tabel atau kolom.
Batasan tingkat tabel: Didefinisikan di luar definisi kolom individu dan dapat diterapkan pada satu atau beberapa kolom.
Batasan tingkat kolom: Didefinisikan dalam definisi kolom individu dan hanya berlaku untuk nilai kolom tertentu tersebut.
Tambahkan batasan
CHECKke pernyataanCREATE TABLE. Contoh:CREATE TABLE t1 ( CHECK (c1 <> c2), -- Batasan tabel c1 INT CHECK (c1 > 10), -- Batasan kolom c2 INT CONSTRAINT c2_positive CHECK (c2 > 0), c3 INT CHECK (c3 < 100), CONSTRAINT c1_nonzero CHECK (c1 <> 0), CHECK (c1 > c3) );Tambahkan batasan
CHECKke pernyataanALTER TABLE. Contoh:-- Batasan kolom ALTER TABLE t1 ADD COLUMN c4 INT CHECK (c4 > 0); -- Batasan tabel ALTER TABLE t1 ADD CHECK (c4 < c3); ALTER TABLE t1 ADD CONSTRAINT `c4_maximize` CHECK (c4 < 20);Lihat batasan
CHECK.SHOW CREATE TABLE t1;Hasil contoh:
CREATE TABLE `t1` ( `c1` int DEFAULT NULL, `c2` int DEFAULT NULL, `c3` int DEFAULT NULL, `c4` int DEFAULT NULL, CONSTRAINT `c1_nonzero` CHECK (`c1` <> 0), CONSTRAINT `c2_positive` CHECK (`c2` > 0), CONSTRAINT `c4_maximize` CHECK (`c4` < 20), CONSTRAINT `t1_chk_1` CHECK (`c1` <> `c2`), CONSTRAINT `t1_chk_2` CHECK (`c1` > 10), CONSTRAINT `t1_chk_3` CHECK (`c3` < 100), CONSTRAINT `t1_chk_4` CHECK (`c1` > `c3`), CONSTRAINT `t1_chk_5` CHECK (`c4` > 0), CONSTRAINT `t1_chk_6` CHECK (`c4` < `c3`) ) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 DEFAULT COLLATE = utf8mb4_general_ci
Aktifkan atau nonaktifkan batasan CHECK
Jika Anda menentukan opsi
NOT ENFORCEDuntuk batasan CHECK, batasan tersebut tidak akan berlaku. Saat menyisipkan atau memperbarui data, sistem tidak akan memeriksa data tersebut terhadap batasan. Contoh:ALTER TABLE t1 ADD CHECK c4_c1_not_equal (c4 <> c1) NOT ENFORCED;Jika Anda menentukan opsi
ENFORCEDatau tidak menentukan opsiNOT ENFORCED, sistem akan memeriksa semua data yang dimasukkan dan diperbarui terhadap batasan. Data yang sudah ada tidak diperiksa kecuali diperbarui.Anda dapat menggunakan pernyataan
ALTER TABLEuntuk menyesuaikan status batasanCHECK. Contoh:
ALTER TABLE t1 ALTER CONSTRAINT c1_nonzero NOT ENFORCED;Hapus batasan CHECK
Saat menghapus batasan CHECK, Anda harus menentukan namanya. Contoh:
ALTER TABLE t1 DROP CONSTRAINT t1_chk_1;