全部产品
Search
文档中心

PolarDB:Batasan CHECK

更新时间:Jul 03, 2025

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.

Catatan

Sintaksis

[CONSTRAINT [symbol]] CHECK (expr) [[NOT] ENFORCED]
Catatan

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 TableName_chk_(1,2,3...).

CHECK (expr)

Kondisi batasan. expr adalah ekspresi Boolean yang mengembalikan TRUE, FALSE, atau UNKNOWN untuk setiap baris tabel. UNKNOWN berarti bahwa nilai kolom adalah NULL. Jika expr adalah FALSE atau UNKNOWN, baris tersebut tidak memenuhi kondisi dan melanggar 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.

Penting
  • 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 CHECK ke pernyataan CREATE 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 CHECK ke pernyataan ALTER 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 ENFORCED untuk 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 ENFORCED atau tidak menentukan opsi NOT 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 TABLE untuk menyesuaikan status batasan CHECK. 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;