sql >> Databáze >  >> RDS >> Database

Zkontrolujte omezení v SQL

Omezení kontroly v SQL je pravidlo nebo sada pravidel používaných k omezení rozsahu dat, který lze zadat do sloupce tabulky. Kontrolní omezení se používá na tabulce i na sloupci. Můžeme tedy říci, že omezení kontroly lze vytvořit na úrovni sloupců a na úrovni tabulky.

Zaškrtněte políčko Omezení aplikované na sloupec a povolí určité hodnoty pro tento sloupec při vkládání do sloupce. Pokud u tabulky definujete omezení CHECK, může omezit hodnoty v určitých sloupcích na základě hodnot v jiných sloupcích v řádku. Můžeme použít více kontrolních omezení v jedné tabulce.

Podívejme se na některé příklady, abychom lépe porozuměli konceptu Check Constraint.

Omezení kontroly úrovně sloupce

Kontrolní omezení je definováno hned za názvem sloupce, známé jako Omezení kontroly na úrovni sloupce. Syntaxe omezení kontroly úrovně sloupce takto,

CREATE TABLE TABLE_NAME(COLUMN_NAME1 DATATYPE(SIZE), COLUMN_NAME2 DATATYPE(SIZE) CHECK(COLUMN_NAME CONDITION), COLUMN_NAME3 DATATYPE(SIZE));

Například vytvoříme tabulku a definujeme kontrolní omezení na úrovni sloupců pro jeden z následujících sloupců v tabulce:

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);

Ve výše uvedeném dotazu jsme vytvořili tabulku s názvem Zaměstnanci a definoval určité sloupce. V tabulce Zaměstnanec jsme zadali kontrolní omezení platu sloupec. Samotné omezení říká, že sloupec plat bude přijímat pouze ty údaje, jejichž plat zaměstnance je vyšší než 40 000; pokud je plat nižší než 40 000, dojde k chybám při porušení omezení.

Pro křížovou kontrolu, zda je omezení CHECK definováno v Platu sloupec, použijeme níže uvedený dotaz:

SHOW CREATE TABLE EMPLOYEES;

Vložíme záznam do tabulky Zaměstnanec, kde je mzda zaměstnance nižší než 40 000.

INSERT INTO EMPLOYEES VALUES (1171101, 'Parag Chordia', 38000, 'Pune', 'Java');

Když jsme vložili záznam zaměstnance, jehož plat je nižší než 40 000, zobrazí se chybová zpráva omezení se nezdařilo; proč? Protože jsme aplikovali kontrolní omezení na plat, které umožní pouze záznamy, jejichž plat zaměstnance je vyšší než 40 000.

Vložíme záznam do tabulky Zaměstnanec, kde je mzda zaměstnance vyšší než 40 000.

INSERT INTO EMPLOYEES VALUES (1171101, 'Parag Chordia', 45000, 'Pune', 'Java');

Pro křížovou kontrolu, zda jsou data vložena do tabulky, použijeme níže uvedený dotaz:

SELECT * FROM EMPLOYEES;

Záznam zaměstnance byl úspěšně vložen do tabulky, protože jsme zadali Plat zaměstnance vyšší než 40 000.

Příklad 2: Vytvoříme tabulku a definujeme kontrolní omezení na úrovni sloupců pro více než jeden sloupec v tabulce.

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' )));

Ve výše uvedeném dotazu jsme vytvořili název tabulky Manager a definovali určité sloupce. Zadali jsme kontrolní omezení na sloupec platu ve Správci tabulky. Samotné omezení říká, že sloupec plat bude přijímat pouze ty údaje, jejichž plat manažera je vyšší než 60 000; pokud je plat nižší než 60 000, dojde k chybám porušení omezení a oddělením manažera je Oracle, FMW, Testing a Java.

Pro křížovou kontrolu, zda je omezení CHECK definováno ve sloupcích Plat a Oddělení, použijeme následující dotaz:

SHOW CREATE TABLE MANAGER;

Do tabulky Manažer vložíme záznam, kde plat manažera je nižší než 60 000 a oddělení je Java.

INSERT INTO MANAGER VALUES(1, 'Bhavesh Bardiya', 59500, 'Java');

Když jsme vložili záznam manažera, jehož plat je nižší než 60 000, zobrazí se chybová zpráva omezení selhání; proč? Protože jsme aplikovali kontrolní omezení na plat, které povolí pouze ty záznamy, jejichž plat manažera je vyšší než 60 000. Ale ve sloupci Oddělení se nevyskytla žádná chyba omezení, protože jsme vložili ty hodnoty, které bylo možné vložit,

Do tabulky Manažer vložíme záznam, kde plat manažera je větší než 60 000 a oddělení je Java.

INSERT INTO MANAGER VALUES(1, 'Bhavesh Bardiya', 62000, 'Java');

Pro křížovou kontrolu, zda jsou data vložena do tabulky, použijeme níže uvedený dotaz:

SELECT * FROM MANAGER;

Záznam manažera byl úspěšně vložen do tabulky, protože jsme zadali Plat manažera vyšší než 60 000 a název oddělení Java.

Omezení kontroly na úrovni tabulky

Kontrolní omezení je definováno na konci tabulky, známé jako Kontrolní omezení na úrovni tabulky. Syntaxe omezení kontroly úrovně tabulky takto,

CREATE TABLE TABLE_NAME(COLUMN_NAME1 DATATYPE(SIZE), COLUMN_NAME2 DATATYPE(SIZE), COLUMN_NAME3 DATATYPE(SIZE), CONSTRAINT CONSTAINT_NAME CHECK(COLUMN_NAME CONDITION));

Příklad 1: Vytvoříme tabulku a definujeme omezení kontroly na úrovni tabulky v jednom z následujících sloupců v tabulce.

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));

Ve výše uvedeném dotazu jsme vytvořili tabulku s názvem Zaměstnanci a definoval určité sloupce. V tabulce Zaměstnanec jsme zadali kontrolní omezení platu sloupec. Samotné omezení říká, že sloupec plat bude přijímat pouze ty údaje, jejichž plat zaměstnance je vyšší než 40 000; pokud je plat nižší než 40 000 omezení, dojde k chybám při porušení.

Pro křížovou kontrolu, zda je ve sloupci Plat definováno omezení CHECK, použijeme následující dotaz:

SHOW CREATE TABLE EMPLOYEES;

Vložíme záznam do tabulky Zaměstnanec, kde je mzda zaměstnance nižší než 40 000.

INSERT INTO EMPLOYEES VALUES (1171101, 'Naman Sharma', 38000, 'Pune', 'Java');

Když jsme vložili záznam zaměstnance, jehož plat je nižší než 40 000, zobrazí se chybová zpráva omezení se nezdařilo; proč? Protože jsme aplikovali kontrolní omezení na plat, které umožní pouze záznamy, jejichž plat zaměstnance je vyšší než 40 000.

Vložíme záznam do tabulky Zaměstnanec, kde je mzda zaměstnance vyšší než 40 000.

INSERT INTO EMPLOYEES VALUES (1171101, 'Naman Sharma', 45000, 'Pune', 'Java');

Pro křížovou kontrolu, zda jsou data vložena do tabulky, použijeme níže uvedený dotaz:

SELECT * FROM EMPLOYEES;

Záznam zaměstnance byl úspěšně vložen do tabulky, protože jsme zadali Plat zaměstnance vyšší než 40 000.

Příklad 2: Vytvoříme tabulku a definujeme kontrolní omezení na úrovni sloupců pro více než jeden sloupec v tabulce.

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')));

Vytvořili jsme název tabulky Manager ve výše uvedeném dotazu a definoval určité sloupce. Stanovili jsme kontrolní omezení na plat sloupec ve Správci tabulky. Samotné omezení říká, že sloupec plat bude přijímat pouze ty údaje, jejichž plat manažera je vyšší než 60 000; pokud je plat nižší než 60 000, dojde k chybám porušení omezení a oddělením manažera je Oracle, FMW, Testing a Java.

Pro křížovou kontrolu, zda je omezení CHECK definováno ve sloupcích Plat a Oddělení, použijeme následující dotaz:

SHOW CREATE TABLE MANAGER;

Do tabulky Manažer vložíme záznam, kde plat manažera je nižší než 60 000 a oddělení je Java.

INSERT INTO MANAGER VALUES(1, 'Surili Jain', 59500, 'Java');

Když jsme vložili záznam manažera, jehož plat je nižší než 60 000, zobrazí se chybová zpráva omezení selhání; proč? Protože jsme aplikovali kontrolní omezení na plat, které povolí pouze ty záznamy, jejichž plat manažera je vyšší než 60 000. Ale ve sloupci Oddělení se nevyskytla žádná chyba omezení, protože jsme vložili ty hodnoty, které bylo možné vložit,

Do tabulky Manažer vložíme záznam, kde plat manažera je větší než 60 000 a oddělení je Java.

INSERT INTO MANAGER VALUES(1, 'Surili Jain', 62500, 'Java');

Pro křížovou kontrolu, zda jsou data vložena do tabulky, použijeme níže uvedený dotaz:

SELECT * FROM MANAGER;

Záznam manažera byl úspěšně vložen do tabulky, protože jsme zadali Plat manažera vyšší než 60 000 a název oddělení Java.

Zkontrolujte omezení pomocí Alter

Vytvořili jsme tabulku a zapomněli jsme přidat CHECK CONSTRAINT při vytváření tabulky, a pak musíme přidat CHECK CONSTRAINT do tabulky. V takových případech použijeme příkaz ALTER k aplikaci CHECK CONSTRAINT na existující tabulku.

Syntaxe Check Constraint pomocí Alter takto,

ALTER TABLE TABLE_NAME ADD CONSTRAINT CONSTRAINT_NAME CHECK (COLUMN_NAME CONDITION);

Příklad 1: Předpokládejme, že jsme vytvořili Zaměstnanci tabulky bez přidání kontrolních omezení. Nyní chceme přidat Check Constraint na jeden ze sloupců. Potom použijeme níže uvedený dotaz:

ALTER TABLE EMPLOYEES ADD CONSTRAINT Sal_Constraint CHECK (SALARY > 35000);  

Pro křížovou kontrolu, zda je omezení CHECK definováno v Platu sloupec, použijeme níže uvedený dotaz:

SHOW CREATE TABLE EMPLOYEES;

Vložíme záznam do tabulky Zaměstnanci, kde je mzda zaměstnance nižší než 35 000.

INSERT INTO EMPLOYEES VALUES (1001, 'Abhinav Patil', 30000, 'Mumbai', 'Testing');

Když jsme vložili záznam zaměstnance, jehož plat je nižší než 35 000, zobrazí se chybová zpráva omezení selhání; proč? Protože jsme aplikovali kontrolní omezení na plat, které umožní pouze záznamy, jejichž plat zaměstnance je vyšší než 35 000.

Příklad 2: Předpokládejme, že jsme vytvořili Zaměstnanci tabulky bez přidání kontrolních omezení. Nyní chceme přidat Check Constraint na jeden ze sloupců. Potom použijeme níže uvedený dotaz:

ALTER TABLE EMPLOYEES ADD CONSTRAINT City_Constraint CHECK (CITY IN ('Mumbai', 'Pune', 'Bangalore', 'Chennai'));

Pro křížovou kontrolu, zda je omezení CHECK definováno pro Město sloupec, použijeme níže uvedený dotaz:

SHOW CREATE TABLE EMPLOYEES;

Vložíme záznam do tabulky Zaměstnanec, kde Město zaměstnance je Džajpur.

SHOW CREATE TABLE EMPLOYEES;

Když jsme vložili záznam zaměstnance, jehož název města je Džajpur, zobrazí se chybová zpráva omezení selhala; proč? Protože jsme na City použili omezení Check, které povolí pouze ty záznamy, kde název města bude „Bombaj“, „Pune“, „Bangalore“ nebo „Chennai“.

Zrušit kontrolní omezení

Předpokládejme, že jsme definovali CHECK CONSTRAINT na sloupcích tabulky. Později chceme toto OMEZENÍ ze sloupce odstranit. Poté pomocí příkazu ALTER zrušíme CHECK CONSTRAINT.

Syntaxe Drop Check Constraint takto,

ALTER TABLE TABLE_NAME DROP CONSTRAINT CONSTRAINT_NAME;

Příklad 1: Předpokládejme, že jsme definovali Kontrolní omezení v jednom ze sloupců tabulky Zaměstnanci. Později jsme se rozhodli toto omezení zrušit.

Nejprve zkontrolujeme vytvořené omezení, pro toto použití následující dotaz:

SHOW CREATE TABLE EMPLOYEES;

Napíšeme níže uvedený dotaz pro zrušení omezení s názvem 'City_Constraint'.

ALTER TABLE EMPLOYEES DROP CONSTRAINT City_Constraint;

Znovu použijeme dotaz SHOW CREATE TABLE ke kontrole, zda bylo omezení úspěšně zrušeno.

SHOW CREATE TABLE EMPLOYEES;

Příklad 2: Předpokládejme, že jsme definovali kontrolní omezení v jednom ze sloupců tabulky manažerů. Později jsme se rozhodli toto omezení zrušit.

Nejprve zkontrolujeme vytvořené omezení, pro toto použití následující dotaz:

SHOW CREATE TABLE MANAGER;

Napíšeme níže uvedený dotaz pro zrušení omezení s názvem 'SALARY_CONST'.

ALTER TABLE MANAGER DROP CONSTRAINT SALARY_CONST;

Znovu použijeme dotaz SHOW CREATE TABLE ke kontrole, zda bylo omezení úspěšně zrušeno.

SHOW CREATE TABLE MANAGER;


  1. Jak Access komunikuje se zdroji dat ODBC? Část 6

  2. Agregovat jeden sloupec v dotazu s mnoha sloupci

  3. Jak použít více příkazů WITH v jednom dotazu PostgreSQL?

  4. Jak ALTER více sloupců najednou v SQL Server