Di SQLite, Anda dapat membuat CHECK
kendala dengan menambahkan kode yang berlaku dalam CREATE TABLE
pernyataan saat membuat tabel.
Jika tabel memiliki CHECK
kendala di atasnya, dan Anda mencoba memasukkan atau memperbarui data yang melanggar CHECK
kendala, operasi akan gagal dengan kesalahan.
Batasan PERIKSA Level Kolom
Berikut ini contoh pembuatan CHECK
tingkat kolom kendala.
CREATE TABLE Products(
ProductId INTEGER PRIMARY KEY,
ProductName,
Price
CHECK (Price > 0)
);
Bagian yang masuk CHECK (Price > 0)
adalah CHECK
kendala.
Dalam hal ini, ini menetapkan bahwa harga harus lebih besar dari nol.
Sekarang mari kita lihat apa yang terjadi jika kita mencoba memasukkan data yang melanggar batasan ini.
INSERT INTO Products VALUES
(NULL, 'Blue Widget', 0.00);
Hasil:
Error: CHECK constraint failed: Products
CHECK
kendala bekerja seperti yang diharapkan.
Saya mendapatkan hasil yang sama jika saya mencoba menggunakan nilai negatif.
INSERT INTO Products VALUES
(NULL, 'Blue Widget', -1.00);
Hasil:
Error: CHECK constraint failed: Products
Tetapi jika saya meningkatkannya ke nilai yang lebih besar dari nol, maka INSERT
operasi berhasil.
INSERT INTO Products VALUES
(NULL, 'Blue Widget', 1.00);
SELECT * FROM Products;
Hasil:
ProductId ProductName Price ---------- ----------- ---------- 1 Blue Widget 1.0
Keterbatasan PERIKSA Tingkat Tabel
CHECK
tingkat tabel kendala memeriksa data di seluruh baris, bukan hanya satu kolom. Dengan kata lain, Anda dapat menggunakan batasan tingkat tabel untuk memeriksa data dari beberapa kolom.
Berikut adalah contoh tingkat tabel CHECK
kendala.
CREATE TABLE Products(
ProductId INTEGER PRIMARY KEY,
ProductName,
Price,
Discount,
CHECK (Price >= Discount)
);
Tabel ini mirip dengan yang pertama, kecuali bahwa saya telah menambahkan kolom tambahan yang disebut Diskon .
Untuk CHECK
kendala, saya sekarang memeriksa bahwa harga lebih besar dari diskon (kami tidak ingin kemungkinan memiliki diskon yang lebih besar dari harga sebenarnya).
Inilah yang terjadi jika saya mencoba memasukkan diskon yang lebih besar dari harga.
INSERT INTO Products VALUES
(NULL, 'Blue Widget', 1.00, 2.00);
Hasil:
Error: CHECK constraint failed: Products
Jika saya menyesuaikan diskon sehingga lebih rendah dari harga, itu berhasil dimasukkan.
INSERT INTO Products VALUES
(NULL, 'Blue Widget', 1.00, 0.50);
SELECT * FROM Products;
Hasil:
ProductId ProductName Price Discount ---------- ----------- ---------- ---------- 1 Blue Widget 1.0 0.5