sql >> Databasteknik >  >> RDS >> Database

Kontrollera Constraint i SQL

Check Constraint i SQL är regeln eller uppsättningen regler som används för att begränsa dataintervallet som kan anges i en tabellkolumn. Kontrollbegränsning används i tabellen såväl som på kolumnen. Så vi kan säga att kontrollbegränsning kan skapas på kolumnnivå och tabellnivå.

Markera Begränsning som tillämpas på kolumnen, så tillåter det vissa värden för denna kolumn när den infogas i kolumnen. Om du definierar en KONTROLL-begränsning i en tabell kan den begränsa värdena i vissa kolumner baserat på värden i andra kolumner i raden. Vi kan tillämpa flera kontrollbegränsningar i en enda tabell.

Låt oss se vissa exempel för att förstå konceptet Check Constraint tydligare.

Kontrollbegränsning för kolumnnivå

Kontrollbegränsningen definieras precis efter kolumnnamnet, känt för att vara kolumnnivåkontrollbegränsning. Syntax för kolumnnivåkontrollbegränsning enligt följande,

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

Till exempel vi kommer att skapa en tabell och definiera en kontrollbegränsning på kolumnnivå på en av följande kolumner i en tabell:

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

I ovanstående fråga har vi skapat en tabell med namnet Anställda och definierade vissa kolumner. I tabellen Anställd har vi specificerat kontrollbegränsningar på lönen kolumn. Själva begränsningen säger att lönekolumnen endast accepterar de uppgifter vars anställdas lön är större än 40 000; om lönen är mindre än 40 000, kommer begränsningsfel att inträffa.

För att dubbelkontrollera att CHECK-begränsningen är definierad på Lön kolumnen kommer vi att använda nedanstående fråga:

SHOW CREATE TABLE EMPLOYEES;

Vi kommer att infoga en post i tabellen Anställd där en anställds lön är mindre än 40 000.

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

När vi infogade en anställningspost vars lön är mindre än 40 000, visas ett felmeddelande om begränsningen misslyckades; Varför? Eftersom vi tillämpade Check-begränsning på en lön som endast tillåter de poster vars anställdas lön är större än 40 000.

Vi kommer att infoga en post i tabellen Anställd där en anställds lön är högre än 40 000.

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

För att korskontrollera om data infogas i en tabell använder vi följande fråga:

SELECT * FROM EMPLOYEES;

En anställningspost har infogats i tabellen när vi angav lön för anställda som är större än 40 000.

Exempel 2: Vi kommer att skapa en tabell och definiera en kontrollbegränsning på kolumnnivå för mer än en kolumn i en tabell.

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

Vi har skapat en tabellnamnshanterare i ovanstående fråga och definierat vissa kolumner. Vi har specificerat kontrollbegränsningar i lönekolumnen i en tabell Manager. Själva begränsningen säger att lönekolumnen endast accepterar de uppgifter vars chefslön är större än 60 000; om lönen är mindre än 60 000, kommer begränsningsfel att inträffa och chefens avdelning är Oracle, FMW, Testing och Java.

För att korskontrollera att KONTROLL-begränsningen är definierad i kolumnen Lön och avdelningskolumnen använder vi frågan nedan:

SHOW CREATE TABLE MANAGER;

Vi kommer att infoga en post i chefstabellen där lönen för en chef är mindre än 60 000 och avdelningen är Java.

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

När vi infogade en chefspost vars lön är mindre än 60 000, visas felmeddelandet om begränsningen misslyckades; Varför? Eftersom vi tillämpade kontrollbegränsning på en lön som endast tillåter de poster vars chefslön är högre än 60 000. Men inget begränsningsfel inträffade i kolumnen Avdelning eftersom vi infogade de värden som kolumnen fick infogas,

Vi kommer att infoga en post i chefstabellen där lönen för en chef är högre än 60 000 och avdelningen är Java.

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

För att korskontrollera om data infogas i en tabell använder vi följande fråga:

SELECT * FROM MANAGER;

Chefsposten har infogats i tabellen när vi angav chefslön över 60 000 och avdelningsnamnet Java.

Kontroll av tabellnivå

Kontrollbegränsningen definieras i slutet av tabellen, känd som kontrollbegränsningen för tabellnivå. Syntax för kontroll av tabellnivå enligt följande,

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

Exempel 1: Vi kommer att skapa en tabell och definiera en kontrollbegränsning för tabellnivå i en av följande kolumner i en tabell.

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

I ovanstående fråga har vi skapat en tabell med namnet Anställda och definierade vissa kolumner. I tabellen Anställd har vi specificerat kontrollbegränsningar på lönen kolumn. Själva begränsningen säger att lönekolumnen endast accepterar de uppgifter vars anställdas lön är större än 40 000; om lönen är mindre än 40 000 begränsningar kommer överträdelsefel att inträffa.

För att korskontrollera att KONTROLL-begränsningen är definierad i kolumnen Lön använder vi följande fråga:

SHOW CREATE TABLE EMPLOYEES;

Vi kommer att infoga en post i tabellen Anställd där en anställds lön är mindre än 40 000.

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

När vi infogade en anställningspost vars lön är mindre än 40 000, visas ett felmeddelande om begränsningen misslyckades; Varför? Eftersom vi tillämpade Check-begränsning på en lön som endast tillåter de poster vars anställdas lön är större än 40 000.

Vi kommer att infoga en post i tabellen Anställd där en anställds lön är högre än 40 000.

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

För att korskontrollera om data infogas i en tabell använder vi följande fråga:

SELECT * FROM EMPLOYEES;

En anställningspost har infogats i tabellen när vi angav lön för anställda som är större än 40 000.

Exempel 2: Vi kommer att skapa en tabell och definiera en kontrollbegränsning på kolumnnivå för mer än en kolumn i en tabell.

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

Vi har skapat ett tabellnamn Manager i ovanstående fråga och definierade vissa kolumner. Vi har specificerat kontrollbegränsningar för lönen kolumn i en tabellhanterare. Själva begränsningen säger att lönekolumnen endast accepterar de uppgifter vars chefslön är större än 60 000; om lönen är mindre än 60 000, kommer begränsningsfel att inträffa och chefens avdelning är Oracle, FMW, Testing och Java.

För att korskontrollera att KONTROLL-begränsningen är definierad i kolumnen Lön och avdelningskolumnen använder vi frågan nedan:

SHOW CREATE TABLE MANAGER;

Vi kommer att infoga en post i chefstabellen där lönen för en chef är mindre än 60 000 och avdelningen är Java.

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

När vi infogade en chefspost vars lön är mindre än 60 000, visas felmeddelandet om begränsningen misslyckades; Varför? Eftersom vi tillämpade kontrollbegränsning på en lön som endast tillåter de poster vars chefslön är högre än 60 000. Men inget begränsningsfel inträffade i kolumnen Avdelning eftersom vi infogade de värden som kolumnen fick infogas,

Vi kommer att infoga en post i chefstabellen där lönen för en chef är högre än 60 000 och avdelningen är Java.

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

För att korskontrollera om data infogas i en tabell använder vi följande fråga:

SELECT * FROM MANAGER;

Chefsposten har infogats i tabellen när vi angav chefslön över 60 000 och avdelningsnamnet Java.

Kontrollera begränsning med Alter

Vi skapade en tabell och glömde att lägga till CHECK CONSTRAINT när vi skapade en tabell, och då måste vi lägga till CHECK CONSTRAINT i en tabell. I sådana fall kommer vi att använda ALTER-kommandot för att tillämpa CHECK CONSTRAINT på den befintliga tabellen.

Syntax för Check Constraint med Alter enligt följande,

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

Exempel 1: Anta att vi skapade en Anställda tabell utan att lägga till Check Constraints. Nu vill vi lägga till Check Constraint på en av kolumnerna. Då kommer vi att använda nedanstående fråga:

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

För att dubbelkontrollera att CHECK-begränsningen är definierad på Lön kolumnen kommer vi att använda nedanstående fråga:

SHOW CREATE TABLE EMPLOYEES;

Vi kommer att infoga en post i tabellen Anställd där en anställds lön är mindre än 35 000.

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

När vi infogade en anställningspost vars lön är mindre än 35 000, visas ett felmeddelande om begränsningen misslyckades; Varför? Eftersom vi tillämpade Check-begränsning på en lön som endast tillåter de poster vars anställdas lön är större än 35 000.

Exempel 2: Anta att vi skapade en Anställda tabell utan att lägga till Check Constraints. Nu vill vi lägga till Check Constraint på en av kolumnerna. Då kommer vi att använda nedanstående fråga:

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

För att korskontrollera att CHECK-begränsningen är definierad på Stad kolumnen kommer vi att använda nedanstående fråga:

SHOW CREATE TABLE EMPLOYEES;

Vi kommer att infoga en post i tabellen Anställd där en anställds stad är Jaipur.

SHOW CREATE TABLE EMPLOYEES;

När vi infogade en anställd post vars stad heter Jaipur, visas felmeddelandet om begränsningen misslyckades; Varför? Eftersom vi tillämpade Check-begränsning på City som endast tillåter de poster där stadsnamnet kommer att vara 'Mumbai', 'Pune', 'Bangalore' eller 'Chennai'.

Släpp kontrollbegränsning

Anta att vi har definierat en KONTROLLBEGRÄNSNING på tabellkolumnerna. Senare vill vi ta bort den CONSTRAINT från kolumnen. Sedan använder vi ALTER-kommandot för att släppa CHECK CONSTRAINT.

Syntax för Drop Check Constraint enligt följande,

ALTER TABLE TABLE_NAME DROP CONSTRAINT CONSTRAINT_NAME;

Exempel 1: Anta att vi har definierat Check Constraint i en av kolumnerna i tabellen Anställda. Senare bestämde vi oss för att släppa den begränsningen.

Vi kommer först att kontrollera skapad begränsning, för denna användning följande fråga:

SHOW CREATE TABLE EMPLOYEES;

Vi kommer att skriva nedanstående fråga för att släppa begränsningen som heter 'City_Constraint'.

ALTER TABLE EMPLOYEES DROP CONSTRAINT City_Constraint;

Vi kommer återigen att använda SHOW CREATE TABLE-frågan för att kontrollera att begränsningen har släppts.

SHOW CREATE TABLE EMPLOYEES;

Exempel 2: Anta att vi har definierat Check Constraint på en av kolumnerna i Manager-tabellen. Senare bestämde vi oss för att släppa den begränsningen.

Vi kommer först att kontrollera skapad begränsning, för denna användning följande fråga:

SHOW CREATE TABLE MANAGER;

Vi kommer att skriva nedanstående fråga för att släppa begränsningen med namnet 'SALARY_CONST'.

ALTER TABLE MANAGER DROP CONSTRAINT SALARY_CONST;

Vi kommer återigen att använda SHOW CREATE TABLE-frågan för att kontrollera att begränsningen har släppts.

SHOW CREATE TABLE MANAGER;


  1. Exempelscheman på GitHub

  2. Escape en sträng i SQL Server så att den är säker att använda i LIKE-uttryck

  3. ORA-21700:objektet finns inte eller är markerat för borttagning för Associative Array som indataparameter anropad från ODP.NET

  4. Att använda IS NULL eller IS NOT NULL på anslutningsvillkor - Teorifråga