SQLのチェック制約は、テーブル列に入力できるデータ範囲を制限するために使用されるルールまたはルールのセットです。チェック制約は、テーブルと列で使用されます。つまり、チェック制約は列レベルとテーブルレベルで作成できます。
列に適用されている制約を確認すると、列に挿入するときにこの列に特定の値が許可されます。テーブルにCHECK制約を定義すると、その行の他の列の値に基づいて、特定の列の値を制限できます。 1つのテーブルに複数のチェック制約を適用できます。
チェック制約の概念をより明確に理解するために、特定の例を見てみましょう。
列レベルのチェック制約
チェック制約は、列名の直後に定義されます。これは、列レベルのチェック制約と呼ばれます。次のような列レベルのチェック制約の構文
CREATE TABLE TABLE_NAME(COLUMN_NAME1 DATATYPE(SIZE), COLUMN_NAME2 DATATYPE(SIZE) CHECK(COLUMN_NAME CONDITION), COLUMN_NAME3 DATATYPE(SIZE));
たとえば、 テーブルを作成し、テーブル内の次の列の1つに列レベルのチェック制約を定義します。
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);
上記のクエリでは、従業員という名前のテーブルを作成しました 特定の列を定義しました。テーブルEmployeeで、給与にチェック制約を指定しました。 桁。制約自体は、salary列が従業員の給与が40000を超えるデータのみを受け入れることを示しています。給与が40000未満の場合、制約違反エラーが発生します。
CHECK制約が給与で定義されていることをクロスチェックするには 列では、以下のクエリを使用します:
SHOW CREATE TABLE EMPLOYEES;
従業員の給与が40000未満のレコードを従業員テーブルに挿入します。
INSERT INTO EMPLOYEES VALUES (1171101, 'Parag Chordia', 38000, 'Pune', 'Java');
給与が40000未満の従業員レコードを挿入すると、制約失敗エラーメッセージが表示されます。なぜ?給与にチェック制約を適用したため、従業員の給与が40000を超えるレコードのみが許可されます。
従業員の給与が40000を超えるレコードを従業員テーブルに挿入します。
INSERT INTO EMPLOYEES VALUES (1171101, 'Parag Chordia', 45000, 'Pune', 'Java');
データがテーブルに挿入されているかどうかをクロスチェックするには、次のクエリを使用します。
SELECT * FROM EMPLOYEES;
40000を超える従業員給与を入力したため、従業員レコードがテーブルに正常に挿入されました。
例2: テーブルを作成し、テーブル内の複数の列に列レベルのチェック制約を定義します。
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' )));
上記のクエリでテーブル名Managerを作成し、特定の列を定義しました。テーブルマネージャの給与列にチェック制約を指定しました。制約自体は、salary列がマネージャーの給与が60000を超えるデータのみを受け入れることを示しています。給与が60000未満の場合、制約違反エラーが発生し、マネージャーの部門はOracle、FMW、Testing、およびJavaです。
CHECK制約がSalary列とDepartment列に定義されていることをクロスチェックするには、次のクエリを使用します。
SHOW CREATE TABLE MANAGER;
マネージャーの給与が60000未満で、部門がJavaであるレコードをマネージャーテーブルに挿入します。
INSERT INTO MANAGER VALUES(1, 'Bhavesh Bardiya', 59500, 'Java');
給与が60000未満のマネージャーレコードを挿入すると、制約失敗エラーメッセージが表示されます。なぜ?給与にCheck制約を適用したため、マネージャーの給与が60000を超えるレコードのみが許可されます。ただし、列の挿入が許可された値を挿入したため、Department列で制約エラーは発生しませんでした。
マネージャーの給与が60000を超え、部門がJavaであるレコードをマネージャーテーブルに挿入します。
INSERT INTO MANAGER VALUES(1, 'Bhavesh Bardiya', 62000, 'Java');
データがテーブルに挿入されているかどうかをクロスチェックするには、次のクエリを使用します。
SELECT * FROM MANAGER;
60000を超えるマネージャー給与と部門名Javaを入力したため、マネージャーレコードがテーブルに正常に挿入されました。
テーブルレベルのチェック制約
チェック制約は、テーブルレベルのチェック制約と呼ばれる、テーブルの最後に定義されます。テーブルレベルチェック制約の構文は次のとおりです
CREATE TABLE TABLE_NAME(COLUMN_NAME1 DATATYPE(SIZE), COLUMN_NAME2 DATATYPE(SIZE), COLUMN_NAME3 DATATYPE(SIZE), CONSTRAINT CONSTAINT_NAME CHECK(COLUMN_NAME CONDITION));
例1: テーブルを作成し、テーブルの次の列の1つにテーブルレベルのチェック制約を定義します。
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));
上記のクエリでは、従業員という名前のテーブルを作成しました 特定の列を定義しました。テーブルEmployeeで、給与にチェック制約を指定しました。 桁。制約自体は、salary列が従業員の給与が40000を超えるデータのみを受け入れることを示しています。給与が40000制約未満の場合、違反エラーが発生します。
CHECK制約がSalary列で定義されていることをクロスチェックするには、次のクエリを使用します。
SHOW CREATE TABLE EMPLOYEES;
従業員の給与が40000未満のレコードを従業員テーブルに挿入します。
INSERT INTO EMPLOYEES VALUES (1171101, 'Naman Sharma', 38000, 'Pune', 'Java');
給与が40000未満の従業員レコードを挿入すると、制約失敗エラーメッセージが表示されます。なぜ?給与にチェック制約を適用したため、従業員の給与が40000を超えるレコードのみが許可されます。
従業員の給与が40000を超えるレコードを従業員テーブルに挿入します。
INSERT INTO EMPLOYEES VALUES (1171101, 'Naman Sharma', 45000, 'Pune', 'Java');
データがテーブルに挿入されているかどうかをクロスチェックするには、次のクエリを使用します。
SELECT * FROM EMPLOYEES;
40000を超える従業員給与を入力したため、従業員レコードがテーブルに正常に挿入されました。
例2: テーブルを作成し、テーブル内の複数の列に列レベルのチェック制約を定義します。
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')));
テーブル名マネージャーを作成しました 上記のクエリで、特定の列を定義しました。 給与にチェック制約を指定しました テーブルマネージャの列。制約自体は、salary列がマネージャーの給与が60000を超えるデータのみを受け入れることを示しています。給与が60000未満の場合、制約違反エラーが発生し、マネージャーの部門はOracle、FMW、Testing、およびJavaです。
CHECK制約がSalary列とDepartment列に定義されていることをクロスチェックするには、次のクエリを使用します。
SHOW CREATE TABLE MANAGER;
マネージャーの給与が60000未満で、部門がJavaであるレコードをマネージャーテーブルに挿入します。
INSERT INTO MANAGER VALUES(1, 'Surili Jain', 59500, 'Java');
給与が60000未満のマネージャーレコードを挿入すると、制約失敗エラーメッセージが表示されます。なぜ?給与にCheck制約を適用したため、マネージャーの給与が60000を超えるレコードのみが許可されます。ただし、列の挿入が許可された値を挿入したため、Department列で制約エラーは発生しませんでした。
マネージャーの給与が60000を超え、部門がJavaであるレコードをマネージャーテーブルに挿入します。
INSERT INTO MANAGER VALUES(1, 'Surili Jain', 62500, 'Java');
データがテーブルに挿入されているかどうかをクロスチェックするには、次のクエリを使用します。
SELECT * FROM MANAGER;
60000を超えるマネージャー給与と部門名Javaを入力したため、マネージャーレコードがテーブルに正常に挿入されました。
Alterを使用したチェック制約
テーブルを作成しましたが、テーブルの作成中にCHECK CONSTRAINTを追加するのを忘れたため、テーブルにCHECKCONSTRAINTを追加する必要があります。このような場合、ALTERコマンドを使用して、既存のテーブルにCHECKCONSTRAINTを適用します。
次のようにAlterを使用したチェック制約の構文
ALTER TABLE TABLE_NAME ADD CONSTRAINT CONSTRAINT_NAME CHECK (COLUMN_NAME CONDITION);
例1: 従業員を作成したとします。 チェック制約を追加せずにテーブル。次に、列の1つにチェック制約を追加します。次に、以下のクエリを使用します:
ALTER TABLE EMPLOYEES ADD CONSTRAINT Sal_Constraint CHECK (SALARY > 35000);
CHECK制約が給与で定義されていることをクロスチェックするには 列では、以下のクエリを使用します:
SHOW CREATE TABLE EMPLOYEES;
従業員の給与が35000未満のレコードを従業員テーブルに挿入します。
INSERT INTO EMPLOYEES VALUES (1001, 'Abhinav Patil', 30000, 'Mumbai', 'Testing');
給与が35000未満の従業員レコードを挿入すると、制約失敗エラーメッセージが表示されます。なぜ?給与にチェック制約を適用したため、従業員の給与が35000を超えるレコードのみが許可されます。
例2: 従業員を作成したとします。 チェック制約を追加せずにテーブル。次に、列の1つにチェック制約を追加します。次に、以下のクエリを使用します:
ALTER TABLE EMPLOYEES ADD CONSTRAINT City_Constraint CHECK (CITY IN ('Mumbai', 'Pune', 'Bangalore', 'Chennai'));
CHECK制約が都市で定義されていることをクロスチェックするには 列では、以下のクエリを使用します:
SHOW CREATE TABLE EMPLOYEES;
従業員の市がジャイプールである従業員テーブルにレコードを挿入します。
SHOW CREATE TABLE EMPLOYEES;
都市名がジャイプールの従業員レコードを挿入すると、制約に失敗しましたというエラーメッセージが表示されます。なぜ?都市にチェック制約を適用したため、都市名が「ムンバイ」、「プネ」、「バンガロール」、または「チェンナイ」になるレコードのみが許可されます。
ドロップチェック制約
テーブルの列にCHECKCONSTRAINTを定義したとします。後で、そのCONSTRAINTを列から削除します。次に、ALTERコマンドを使用してCHECKCONSTRAINTを削除します。
ドロップチェック制約の構文は次のとおりです
ALTER TABLE TABLE_NAME DROP CONSTRAINT CONSTRAINT_NAME;
例1: Employeesテーブルの列の1つにCheckConstraintを定義したとします。後で、その制約を削除することにしました。
最初に、作成された制約を確認します。この用途では、次のクエリを使用します。
SHOW CREATE TABLE EMPLOYEES;
「City_Constraint」という名前の制約を削除するために、以下のクエリを記述します。
ALTER TABLE EMPLOYEES DROP CONSTRAINT City_Constraint;
再度、SHOW CREATE TABLEクエリを使用して、制約が正常に削除されたことを確認します。
SHOW CREATE TABLE EMPLOYEES;
例2: Managerテーブルの列の1つにチェック制約を定義したとします。後で、その制約を削除することにしました。
最初に、作成された制約を確認します。この用途では、次のクエリを使用します。
SHOW CREATE TABLE MANAGER;
'SALARY_CONST'という名前の制約を削除するために、以下のクエリを記述します。
ALTER TABLE MANAGER DROP CONSTRAINT SALARY_CONST;
再度、SHOW CREATE TABLEクエリを使用して、制約が正常に削除されたことを確認します。
SHOW CREATE TABLE MANAGER;