Check Constraint dalam SQL adalah aturan atau kumpulan aturan yang digunakan untuk membatasi rentang data yang dapat dimasukkan dalam kolom tabel. Batasan cek digunakan pada tabel dan juga pada kolom. Jadi kita dapat mengatakan, Batasan Periksa dapat dibuat pada level Kolom dan Level Tabel.
Periksa Batasan yang diterapkan pada kolom, dan itu akan memungkinkan nilai-nilai tertentu untuk kolom ini saat memasukkan ke dalam kolom. Jika Anda menentukan batasan CHECK pada tabel, itu dapat membatasi nilai di kolom tertentu berdasarkan nilai di kolom lain di baris. Kami dapat menerapkan beberapa Batasan Pemeriksaan dalam satu tabel.
Mari kita lihat contoh-contoh tertentu untuk memahami konsep Periksa Batasan dengan lebih jelas.
Batasan Pemeriksaan Level Kolom
Batasan pemeriksaan didefinisikan tepat setelah nama kolom, yang dikenal sebagai Batasan Pemeriksaan Tingkat Kolom. Sintaks Batasan Pemeriksaan Level Kolom sebagai berikut,
CREATE TABLE TABLE_NAME(COLUMN_NAME1 DATATYPE(SIZE), COLUMN_NAME2 DATATYPE(SIZE) CHECK(COLUMN_NAME CONDITION), COLUMN_NAME3 DATATYPE(SIZE));
Misalnya, kita akan membuat tabel dan mendefinisikan batasan pemeriksaan tingkat kolom pada salah satu kolom berikut dalam tabel:
CREATE TABLE EMPLOYEES (EMPLOYEEID INT PRIMARY KEY, EMPLOYEE_NAME VARCHAR(50) NOT NULL, SALARY INT CHECK(SALARY > 40000), CITY VARCHAR(20) NOT NULL, DEPARTMENT VARCHAR(30) NOT NULL);
Dalam kueri di atas, kami telah membuat tabel bernama Karyawan dan menentukan kolom tertentu. Di tabel Karyawan, kami telah menetapkan batasan pemeriksaan pada gaji kolom. Batasan itu sendiri mengatakan bahwa kolom gaji hanya akan menerima data yang gaji karyawannya lebih besar dari 40000; jika gaji kurang dari 40000, kesalahan pelanggaran kendala akan terjadi.
Untuk memeriksa silang apakah batasan CHECK ditentukan di Gaji kolom, kami akan menggunakan kueri di bawah ini:
SHOW CREATE TABLE EMPLOYEES;
Kami akan menyisipkan record pada tabel Employee dimana gaji seorang karyawan kurang dari 40000.
INSERT INTO EMPLOYEES VALUES (1171101, 'Parag Chordia', 38000, 'Pune', 'Java');
Ketika kami memasukkan catatan karyawan yang gajinya kurang dari 40000, pesan kesalahan kendala gagal ditampilkan; mengapa? Karena kami menerapkan batasan Periksa pada gaji yang hanya mengizinkan catatan yang gaji karyawannya lebih besar dari 40000.
Kami akan menyisipkan record pada tabel Employee dimana gaji seorang karyawan lebih besar dari 40000.
INSERT INTO EMPLOYEES VALUES (1171101, 'Parag Chordia', 45000, 'Pune', 'Java');
Untuk memeriksa silang apakah data dimasukkan ke dalam tabel, kita akan menggunakan kueri di bawah ini:
SELECT * FROM EMPLOYEES;
Catatan karyawan berhasil dimasukkan ke dalam tabel saat kami memasukkan Gaji Karyawan lebih besar dari 40000.
Contoh 2: Kami akan membuat tabel dan menentukan batasan pemeriksaan tingkat kolom pada lebih dari satu kolom dalam sebuah tabel.
CREATE TABLE MANAGER(MANAGERID INT PRIMARY KEY, NAME VARCHAR(40) NOT NULL, SALARY INT CHECK(SALARY>=60000), DEPARTMENT VARCHAR(20) NOT NULL CHECK(DEPARTMENT IN('Oracle', 'FMW', 'Testing', 'Java' )));
Kami telah membuat Manajer nama tabel dalam kueri di atas dan mendefinisikan kolom tertentu. Kami telah menetapkan batasan pemeriksaan pada kolom gaji di tabel Manajer. Batasan itu sendiri mengatakan bahwa kolom gaji hanya akan menerima data yang gaji manajernya lebih besar dari 60000; jika gaji kurang dari 60000, kesalahan pelanggaran kendala akan terjadi, dan Departemen manajer adalah Oracle, FMW, Pengujian, dan Java.
Untuk memeriksa silang bahwa batasan CHECK didefinisikan pada kolom Gaji dan Kolom Departemen, kita akan menggunakan kueri di bawah ini:
SHOW CREATE TABLE MANAGER;
Kami akan menyisipkan catatan di tabel Manajer di mana gaji seorang manajer kurang dari 60000 dan Departemen adalah Java.
INSERT INTO MANAGER VALUES(1, 'Bhavesh Bardiya', 59500, 'Java');
Ketika kami memasukkan catatan manajer yang gajinya kurang dari 60000, pesan kesalahan kendala gagal ditampilkan; mengapa? Karena kami menerapkan batasan Periksa pada gaji yang akan mengizinkan hanya record yang gaji manajernya lebih besar dari 60000. Tetapi tidak ada kesalahan batasan yang terjadi pada kolom Departemen karena kami memasukkan nilai-nilai yang kolomnya boleh dimasukkan,
Kami akan menyisipkan record di tabel Manajer di mana gaji seorang manajer lebih besar dari 60000, dan Departemen adalah Java.
INSERT INTO MANAGER VALUES(1, 'Bhavesh Bardiya', 62000, 'Java');
Untuk memeriksa silang apakah data dimasukkan ke dalam tabel, kita akan menggunakan kueri di bawah ini:
SELECT * FROM MANAGER;
Catatan manajer berhasil dimasukkan ke dalam tabel saat kami memasukkan Gaji Manajer lebih besar dari 60000 dan nama Departemen Java.
Pembatasan Pemeriksaan Level Tabel
Batasan pemeriksaan didefinisikan di akhir tabel, yang dikenal sebagai Batasan Pemeriksaan Level Tabel. Sintaks Batasan Pemeriksaan Level Tabel sebagai berikut,
CREATE TABLE TABLE_NAME(COLUMN_NAME1 DATATYPE(SIZE), COLUMN_NAME2 DATATYPE(SIZE), COLUMN_NAME3 DATATYPE(SIZE), CONSTRAINT CONSTAINT_NAME CHECK(COLUMN_NAME CONDITION));
Contoh 1: Kami akan membuat tabel dan menentukan batasan pemeriksaan level Tabel pada salah satu kolom berikut dalam tabel.
CREATE TABLE EMPLOYEES (EMPLOYEEID INT PRIMARY KEY, EMPLOYEE_NAME VARCHAR(50) NOT NULL, SALARY INT, CITY VARCHAR(20) NOT NULL, DEPARTMENT VARCHAR(30) NOT NULL, CONSTRAINT salary_constraint CHECK(SALARY > 40000));
Dalam kueri di atas, kami telah membuat tabel bernama Karyawan dan menentukan kolom tertentu. Di tabel Karyawan, kami telah menetapkan batasan pemeriksaan pada gaji kolom. Batasan itu sendiri mengatakan bahwa kolom gaji hanya akan menerima data yang gaji karyawannya lebih besar dari 40000; jika gaji kurang dari 40000 kendala, kesalahan pelanggaran akan terjadi.
Untuk memeriksa silang bahwa batasan CHECK didefinisikan pada kolom Gaji, kami akan menggunakan kueri di bawah ini:
SHOW CREATE TABLE EMPLOYEES;
Kami akan menyisipkan record pada tabel Employee dimana gaji seorang karyawan kurang dari 40000.
INSERT INTO EMPLOYEES VALUES (1171101, 'Naman Sharma', 38000, 'Pune', 'Java');
Ketika kami memasukkan catatan karyawan yang gajinya kurang dari 40000, pesan kesalahan kendala gagal ditampilkan; mengapa? Karena kami menerapkan batasan Periksa pada gaji yang hanya mengizinkan catatan yang gaji karyawannya lebih besar dari 40000.
Kami akan menyisipkan record pada tabel Employee dimana gaji seorang karyawan lebih besar dari 40000.
INSERT INTO EMPLOYEES VALUES (1171101, 'Naman Sharma', 45000, 'Pune', 'Java');
Untuk memeriksa silang apakah data dimasukkan ke dalam tabel, kita akan menggunakan kueri di bawah ini:
SELECT * FROM EMPLOYEES;
Catatan karyawan berhasil dimasukkan ke dalam tabel saat kami memasukkan Gaji Karyawan lebih besar dari 40000.
Contoh 2: Kami akan membuat tabel dan menentukan batasan pemeriksaan tingkat kolom pada lebih dari satu kolom dalam sebuah tabel.
CREATE TABLE MANAGER (MANAGERID INT PRIMARY KEY, NAME VARCHAR(40) NOT NULL, SALARY INT, DEPARTMENT VARCHAR(40) NOT NULL, CONSTRAINT SALARY_CONST CHECK(SALARY>60000), CONSTRAINT DEPT_CONST CHECK(DEPARTMENT IN(‘'Oracle', 'FMW', ‘Java’, 'Testing')));
Kami telah membuat nama tabel Manajer dalam kueri di atas dan mendefinisikan kolom tertentu. Kami telah menetapkan batasan cek pada gaji kolom di Manajer tabel. Batasan itu sendiri mengatakan bahwa kolom gaji hanya akan menerima data yang gaji manajernya lebih besar dari 60000; jika gaji kurang dari 60000, kesalahan pelanggaran kendala akan terjadi, dan Departemen manajer adalah Oracle, FMW, Pengujian, dan Java.
Untuk memeriksa silang bahwa batasan CHECK didefinisikan pada kolom Gaji dan Kolom Departemen, kita akan menggunakan kueri di bawah ini:
SHOW CREATE TABLE MANAGER;
Kami akan menyisipkan catatan di tabel Manajer di mana gaji seorang manajer kurang dari 60000 dan Departemen adalah Java.
INSERT INTO MANAGER VALUES(1, 'Surili Jain', 59500, 'Java');
Ketika kami memasukkan catatan manajer yang gajinya kurang dari 60000, pesan kesalahan kendala gagal ditampilkan; mengapa? Karena kami menerapkan batasan Periksa pada gaji yang akan mengizinkan hanya record yang gaji manajernya lebih besar dari 60000. Tetapi tidak ada kesalahan batasan yang terjadi pada kolom Departemen karena kami memasukkan nilai-nilai yang kolomnya boleh dimasukkan,
Kami akan menyisipkan record di tabel Manajer di mana gaji seorang manajer lebih besar dari 60000, dan Departemen adalah Java.
INSERT INTO MANAGER VALUES(1, 'Surili Jain', 62500, 'Java');
Untuk memeriksa silang apakah data dimasukkan ke dalam tabel, kita akan menggunakan kueri di bawah ini:
SELECT * FROM MANAGER;
Catatan manajer berhasil dimasukkan ke dalam tabel saat kami memasukkan Gaji Manajer lebih besar dari 60000 dan nama Departemen Java.
Periksa Batasan Menggunakan Alter
Kami membuat tabel dan lupa menambahkan CHECK CONSTRAINT saat membuat tabel, dan kemudian kami perlu menambahkan CHECK CONSTRAINT dalam tabel. Dalam kasus seperti itu, kita akan menggunakan perintah ALTER untuk menerapkan CHECK CONSTRAINT pada tabel yang ada.
Sintaks Check Constraint menggunakan Alter sebagai berikut,
ALTER TABLE TABLE_NAME ADD CONSTRAINT CONSTRAINT_NAME CHECK (COLUMN_NAME CONDITION);
Contoh 1: Misalkan kita membuat Karyawan tabel tanpa menambahkan Periksa Batasan. Sekarang kita ingin menambahkan Check Constraint pada salah satu kolom. Kemudian kita akan menggunakan query di bawah ini:
ALTER TABLE EMPLOYEES ADD CONSTRAINT Sal_Constraint CHECK (SALARY > 35000);
Untuk memeriksa silang apakah batasan CHECK ditentukan di Gaji kolom, kami akan menggunakan kueri di bawah ini:
SHOW CREATE TABLE EMPLOYEES;
Kami akan menyisipkan record pada tabel Employee dimana gaji seorang karyawan kurang dari 35000.
INSERT INTO EMPLOYEES VALUES (1001, 'Abhinav Patil', 30000, 'Mumbai', 'Testing');
Saat kami memasukkan catatan karyawan yang gajinya kurang dari 35000, pesan kesalahan kendala gagal ditampilkan; mengapa? Karena kami menerapkan batasan Periksa pada gaji yang hanya mengizinkan catatan yang gaji karyawannya lebih besar dari 35000.
Contoh 2: Misalkan kita membuat Karyawan tabel tanpa menambahkan Periksa Batasan. Sekarang kita ingin menambahkan Check Constraint pada salah satu kolom. Kemudian kita akan menggunakan query di bawah ini:
ALTER TABLE EMPLOYEES ADD CONSTRAINT City_Constraint CHECK (CITY IN ('Mumbai', 'Pune', 'Bangalore', 'Chennai'));
Untuk memeriksa silang apakah batasan CHECK ditentukan di Kota kolom, kami akan menggunakan kueri di bawah ini:
SHOW CREATE TABLE EMPLOYEES;
Kami akan menyisipkan catatan di tabel Karyawan di mana Kota seorang karyawan adalah Jaipur.
SHOW CREATE TABLE EMPLOYEES;
Saat kami memasukkan catatan karyawan yang nama kotanya adalah Jaipur, pesan kesalahan kendala gagal ditampilkan; mengapa? Karena kami menerapkan batasan Periksa di Kota yang hanya akan mengizinkan catatan dengan nama kota 'Mumbai', 'Pune', 'Bangalore', atau 'Chennai'.
Drop Check Constraint
Misalkan kita telah mendefinisikan CHECK CONSTRAINT pada kolom tabel. Nanti kita ingin menghapus CONSTRAINT itu dari kolom. Kemudian kita akan menggunakan perintah ALTER untuk menghapus CHECK CONSTRAINT.
Sintaks Batasan Drop Check sebagai berikut,
ALTER TABLE TABLE_NAME DROP CONSTRAINT CONSTRAINT_NAME;
Contoh 1: Misalkan kita telah mendefinisikan Batasan Periksa pada salah satu kolom tabel Karyawan. Kemudian, kami memutuskan untuk menghilangkan batasan itu.
Kami pertama-tama akan memeriksa batasan yang dibuat, untuk ini gunakan kueri berikut:
SHOW CREATE TABLE EMPLOYEES;
Kami akan menulis kueri di bawah ini untuk menghilangkan batasan bernama 'City_Constraint'.
ALTER TABLE EMPLOYEES DROP CONSTRAINT City_Constraint;
Kami akan kembali menggunakan kueri SHOW CREATE TABLE untuk memeriksa bahwa kendala berhasil dihilangkan.
SHOW CREATE TABLE EMPLOYEES;
Contoh 2: Misalkan kita telah mendefinisikan Batasan Periksa pada salah satu kolom Tabel Manajer. Kemudian, kami memutuskan untuk menghilangkan batasan itu.
Kami pertama-tama akan memeriksa batasan yang dibuat, untuk ini gunakan kueri berikut:
SHOW CREATE TABLE MANAGER;
Kami akan menulis kueri di bawah ini untuk menghilangkan batasan bernama 'SALARY_CONST'.
ALTER TABLE MANAGER DROP CONSTRAINT SALARY_CONST;
Kami akan kembali menggunakan kueri SHOW CREATE TABLE untuk memeriksa bahwa kendala berhasil dihilangkan.
SHOW CREATE TABLE MANAGER;