Check Constraint i SQL er reglen eller sæt regler, der bruges til at begrænse det dataområde, der kan indtastes i en tabelkolonne. Check constraint bruges på tabellen såvel som på kolonnen. Så vi kan sige, check-begrænsning kan oprettes på kolonneniveau og tabelniveau.
Marker Begrænsning anvendt på kolonnen, og det vil tillade visse værdier for denne kolonne, mens den indsættes i kolonnen. Hvis du definerer en CHECK-begrænsning på en tabel, kan den begrænse værdierne i visse kolonner baseret på værdier i andre kolonner i rækken. Vi kan anvende flere Check Constraints i en enkelt tabel.
Lad os se nogle eksempler for at forstå Check Constraint-konceptet mere klart.
Kontrol af kolonneniveau
Kontrolbegrænsningen er defineret lige efter kolonnenavnet, kendt for at være kolonneniveaukontrolbegrænsning. Syntaks for kolonneniveaukontrolbegrænsning som følger,
CREATE TABLE TABLE_NAME(COLUMN_NAME1 DATATYPE(SIZE), COLUMN_NAME2 DATATYPE(SIZE) CHECK(COLUMN_NAME CONDITION), COLUMN_NAME3 DATATYPE(SIZE));
For eksempel vi opretter en tabel og definerer en kontrolbegrænsning på kolonneniveau på en af følgende kolonner i en 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);
I ovenstående forespørgsel har vi oprettet en tabel med navnet Medarbejdere og definerede visse kolonner. I tabellen Medarbejder har vi specificeret kontrolbegrænsninger på lønnen kolonne. Selve begrænsningen siger, at lønkolonnen kun accepterer de data, hvis medarbejderløn er større end 40.000; hvis lønnen er mindre end 40.000, vil der opstå begrænsningsovertrædelsesfejl.
For at krydstjekke, at CHECK-begrænsningen er defineret på Løn kolonne, vil vi bruge nedenstående forespørgsel:
SHOW CREATE TABLE EMPLOYEES;
Vi indsætter en post i medarbejdertabellen, hvor en medarbejders løn er mindre end 40.000.
INSERT INTO EMPLOYEES VALUES (1171101, 'Parag Chordia', 38000, 'Pune', 'Java');
Når vi indsatte en medarbejderpost, hvis løn er mindre end 40.000, vises begrænsningen mislykkedes fejlmeddelelsen; hvorfor? Fordi vi anvendte Check-begrænsning på en løn, som kun tillader de poster, hvis medarbejderløn er større end 40.000.
Vi indsætter en post i medarbejdertabellen, hvor en medarbejders løn er større end 40.000.
INSERT INTO EMPLOYEES VALUES (1171101, 'Parag Chordia', 45000, 'Pune', 'Java');
For at krydstjekke om data er indsat i en tabel, bruger vi nedenstående forespørgsel:
SELECT * FROM EMPLOYEES;
En medarbejderpost blev indsat i tabellen, da vi indtastede medarbejderløn på mere end 40.000.
Eksempel 2: Vi vil oprette en tabel og definere en kontrolbegrænsning på kolonneniveau for mere end én kolonne i en 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' )));
Vi har oprettet en tabelnavn Manager i ovenstående forespørgsel og defineret visse kolonner. Vi har specificeret check-begrænsninger på lønkolonnen i en tabel Manager. Selve begrænsningen siger, at lønkolonnen kun vil acceptere de data, hvis lederløn er større end 60.000; hvis lønnen er mindre end 60.000, vil der opstå begrænsningsovertrædelsesfejl, og lederens afdeling er Oracle, FMW, Testing og Java.
For at krydstjekke, at CHECK-begrænsningen er defineret i kolonnen Løn og afdelingskolonnen, bruger vi nedenstående forespørgsel:
SHOW CREATE TABLE MANAGER;
Vi indsætter en post i Manager-tabellen, hvor lønnen for en leder er mindre end 60000, og afdelingen er Java.
INSERT INTO MANAGER VALUES(1, 'Bhavesh Bardiya', 59500, 'Java');
Når vi indsatte en managerpost, hvis løn er mindre end 60.000, vises fejlmeddelelsen med begrænsningen mislykket; hvorfor? Fordi vi anvendte Check-begrænsning på en løn, som kun tillader de poster, hvis lederløn er større end 60.000. Men der opstod ingen begrænsningsfejl i afdelingskolonnen, fordi vi indsatte de værdier, som kolonnen tillod at blive indsat,
Vi vil indsætte en post i Manager-tabellen, hvor lønnen for en leder er større end 60.000, og afdelingen er Java.
INSERT INTO MANAGER VALUES(1, 'Bhavesh Bardiya', 62000, 'Java');
For at krydstjekke om data er indsat i en tabel, bruger vi nedenstående forespørgsel:
SELECT * FROM MANAGER;
Lederposten er blevet indsat i tabellen, da vi indtastede lederløn på mere end 60.000 og afdelingsnavnet Java.
Kontrol af tabelniveau
Kontrolbegrænsningen er defineret i slutningen af tabellen, kendt som Table Level Check Constraint. Syntaks for Table Level Check Constraint som følger,
CREATE TABLE TABLE_NAME(COLUMN_NAME1 DATATYPE(SIZE), COLUMN_NAME2 DATATYPE(SIZE), COLUMN_NAME3 DATATYPE(SIZE), CONSTRAINT CONSTAINT_NAME CHECK(COLUMN_NAME CONDITION));
Eksempel 1: Vi opretter en tabel og definerer en kontrolbegrænsning på tabelniveau på en af følgende kolonner i en 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));
I ovenstående forespørgsel har vi oprettet en tabel med navnet Medarbejdere og definerede visse kolonner. I tabellen Medarbejder har vi specificeret kontrolbegrænsninger på lønnen kolonne. Selve begrænsningen siger, at lønkolonnen kun accepterer de data, hvis medarbejderløn er større end 40.000; hvis lønnen er mindre end 40.000 begrænsninger, vil der opstå overtrædelsesfejl.
For at krydstjekke, at CHECK-begrænsningen er defineret i kolonnen Løn, bruger vi nedenstående forespørgsel:
SHOW CREATE TABLE EMPLOYEES;
Vi indsætter en post i medarbejdertabellen, hvor en medarbejders løn er mindre end 40.000.
INSERT INTO EMPLOYEES VALUES (1171101, 'Naman Sharma', 38000, 'Pune', 'Java');
Når vi indsatte en medarbejderpost, hvis løn er mindre end 40.000, vises begrænsningen mislykkedes fejlmeddelelsen; hvorfor? Fordi vi anvendte Check-begrænsning på en løn, som kun tillader de poster, hvis medarbejderløn er større end 40.000.
Vi indsætter en post i medarbejdertabellen, hvor en medarbejders løn er større end 40.000.
INSERT INTO EMPLOYEES VALUES (1171101, 'Naman Sharma', 45000, 'Pune', 'Java');
For at krydstjekke om data er indsat i en tabel, bruger vi nedenstående forespørgsel:
SELECT * FROM EMPLOYEES;
En medarbejderpost blev indsat i tabellen, da vi indtastede medarbejderløn på mere end 40.000.
Eksempel 2: Vi vil oprette en tabel og definere en kontrolbegrænsning på kolonneniveau for mere end én kolonne i en 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')));
Vi har oprettet et tabelnavn Manager i ovenstående forespørgsel og definerede visse kolonner. Vi har specificeret check-begrænsninger på lønnen kolonne i en tabel Manager. Selve begrænsningen siger, at lønkolonnen kun vil acceptere de data, hvis lederløn er større end 60.000; hvis lønnen er mindre end 60.000, vil der opstå begrænsningsovertrædelsesfejl, og lederens afdeling er Oracle, FMW, Testing og Java.
For at krydstjekke, at CHECK-begrænsningen er defineret i kolonnen Løn og afdelingskolonnen, bruger vi nedenstående forespørgsel:
SHOW CREATE TABLE MANAGER;
Vi indsætter en post i Manager-tabellen, hvor lønnen for en leder er mindre end 60000, og afdelingen er Java.
INSERT INTO MANAGER VALUES(1, 'Surili Jain', 59500, 'Java');
Når vi indsatte en managerpost, hvis løn er mindre end 60.000, vises fejlmeddelelsen med begrænsningen mislykket; hvorfor? Fordi vi anvendte Check-begrænsning på en løn, som kun tillader de poster, hvis lederløn er større end 60.000. Men der opstod ingen begrænsningsfejl i afdelingskolonnen, fordi vi indsatte de værdier, som kolonnen tillod at blive indsat,
Vi vil indsætte en post i Manager-tabellen, hvor lønnen for en leder er større end 60.000, og afdelingen er Java.
INSERT INTO MANAGER VALUES(1, 'Surili Jain', 62500, 'Java');
For at krydstjekke om data er indsat i en tabel, bruger vi nedenstående forespørgsel:
SELECT * FROM MANAGER;
Lederposten er blevet indsat i tabellen, da vi indtastede lederløn på mere end 60.000 og afdelingsnavnet Java.
Tjek begrænsning ved hjælp af Alter
Vi oprettede en tabel og glemte at tilføje CHECK CONSTRAINT, mens vi oprettede en tabel, og så skal vi tilføje CHECK CONSTRAINT i en tabel. I sådanne tilfælde vil vi bruge ALTER-kommandoen til at anvende CHECK CONSTRAINT på den eksisterende tabel.
Syntaks for Check Constraint ved hjælp af Alter som følger,
ALTER TABLE TABLE_NAME ADD CONSTRAINT CONSTRAINT_NAME CHECK (COLUMN_NAME CONDITION);
Eksempel 1: Antag, at vi har oprettet en Medarbejdere tabel uden at tilføje Check Constraints. Nu vil vi tilføje Check Constraint på en af kolonnerne. Så vil vi bruge nedenstående forespørgsel:
ALTER TABLE EMPLOYEES ADD CONSTRAINT Sal_Constraint CHECK (SALARY > 35000);
For at krydstjekke, at CHECK-begrænsningen er defineret på Løn kolonne, vil vi bruge nedenstående forespørgsel:
SHOW CREATE TABLE EMPLOYEES;
Vi indsætter en post i medarbejdertabellen, hvor en medarbejders løn er mindre end 35.000.
INSERT INTO EMPLOYEES VALUES (1001, 'Abhinav Patil', 30000, 'Mumbai', 'Testing');
Når vi indsatte en medarbejderpost, hvis løn er mindre end 35.000, vises begrænsningen mislykkedes fejlmeddelelsen; hvorfor? Fordi vi anvendte Check-begrænsning på en løn, som kun tillader de poster, hvis medarbejderløn er større end 35.000.
Eksempel 2: Antag, at vi har oprettet en Medarbejdere tabel uden at tilføje Check Constraints. Nu vil vi tilføje Check Constraint på en af kolonnerne. Så vil vi bruge nedenstående forespørgsel:
ALTER TABLE EMPLOYEES ADD CONSTRAINT City_Constraint CHECK (CITY IN ('Mumbai', 'Pune', 'Bangalore', 'Chennai'));
For at krydstjekke, at CHECK-begrænsningen er defineret på By kolonne, vil vi bruge nedenstående forespørgsel:
SHOW CREATE TABLE EMPLOYEES;
Vi indsætter en post i medarbejdertabellen, hvor byen for en medarbejder er Jaipur.
SHOW CREATE TABLE EMPLOYEES;
Da vi indsatte en medarbejderregistrering, hvis bynavn er Jaipur, vises fejlmeddelelsen med begrænsningen mislykket; hvorfor? Fordi vi har anvendt Check-begrænsning på City, som kun tillader de poster, hvor bynavnet vil være 'Mumbai', 'Pune', 'Bangalore' eller 'Chennai'.
Drop Check Constraint
Antag, at vi har defineret en KONTROLBEGRÆNSNING på tabelkolonnerne. Senere ønsker vi at slette denne BEGRÆNSNING fra kolonnen. Så vil vi bruge ALTER-kommandoen til at droppe CHECK CONSTRAINT.
Syntaks for Drop Check Constraint som følger,
ALTER TABLE TABLE_NAME DROP CONSTRAINT CONSTRAINT_NAME;
Eksempel 1: Antag, at vi har defineret Check Constraint på en af kolonnerne i tabellen Medarbejdere. Senere besluttede vi at droppe den begrænsning.
Vi vil først kontrollere oprettet begrænsning, til denne brug følgende forespørgsel:
SHOW CREATE TABLE EMPLOYEES;
Vi vil skrive nedenstående forespørgsel for at slippe begrænsning med navnet 'City_Constraint'.
ALTER TABLE EMPLOYEES DROP CONSTRAINT City_Constraint;
Vi vil igen bruge SHOW CREATE TABLE-forespørgslen til at kontrollere, at begrænsningen er slettet.
SHOW CREATE TABLE EMPLOYEES;
Eksempel 2: Antag, at vi har defineret Check Constraint på en af kolonnerne i Manager-tabellen. Senere besluttede vi at droppe den begrænsning.
Vi vil først kontrollere oprettet begrænsning, til denne brug følgende forespørgsel:
SHOW CREATE TABLE MANAGER;
Vi vil skrive nedenstående forespørgsel for at slippe begrænsning med navnet 'SALARY_CONST'.
ALTER TABLE MANAGER DROP CONSTRAINT SALARY_CONST;
Vi vil igen bruge SHOW CREATE TABLE-forespørgslen til at kontrollere, at begrænsningen er slettet.
SHOW CREATE TABLE MANAGER;