sql >> データベース >  >> RDS >> Database

SQLでの制約の確認

    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;


    1. SQLiteで日付に月を追加する方法

    2. SQL Server Management Studio(SSMS)でオブジェクトをフィルタリングする方法-SQL Server/TSQLチュートリアルパート19

    3. Oracleの「PartitionBy」および「Row_Number」キーワード

    4. Microsoft Accessは死んでおらず、VBAも死んでいない