sql >> Database >  >> RDS >> Database

Beperking in SQL controleren

De controlebeperking in SQL is de regel of reeks regels die wordt gebruikt om het gegevensbereik te beperken dat in een tabelkolom kan worden ingevoerd. Controlebeperking wordt zowel in de tabel als in de kolom gebruikt. We kunnen dus zeggen dat de controlebeperking kan worden gemaakt op kolom- en tabelniveau.

Vink Beperking toegepast op de kolom aan, en het zal bepaalde waarden voor deze kolom toestaan ​​tijdens het invoegen in de kolom. Als u een CHECK-beperking voor een tabel definieert, kan deze de waarden in bepaalde kolommen beperken op basis van waarden in andere kolommen in de rij. We kunnen meerdere controlebeperkingen toepassen in een enkele tabel.

Laten we enkele voorbeelden bekijken om het concept Check Constraint beter te begrijpen.

Beperking kolomniveaucontrole

De controlebeperking wordt gedefinieerd net achter de kolomnaam, bekend als Controlebeperking op kolomniveau. Syntaxis van controlebeperking op kolomniveau als volgt,

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

Bijvoorbeeld we zullen een tabel maken en een controlebeperking op kolomniveau definiëren voor een van de volgende kolommen in een 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);

In de bovenstaande zoekopdracht hebben we een tabel gemaakt met de naam Werknemers en bepaalde kolommen gedefinieerd. In de tabel Werknemer hebben we controlebeperkingen gespecificeerd op het salaris kolom. De beperking zelf zegt dat de salariskolom alleen die gegevens accepteert waarvan het werknemerssalaris hoger is dan 40000; als het salaris lager is dan 40000, zullen er fouten optreden bij het overtreden van beperkingen.

Om te controleren of de CHECK-beperking is gedefinieerd op het Salaris kolom, zullen we de onderstaande zoekopdracht gebruiken:

SHOW CREATE TABLE EMPLOYEES;

We zullen een record invoegen in de werknemertabel waar het salaris van een werknemer lager is dan 40000.

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

Wanneer we een werknemersrecord invoegen waarvan het salaris lager is dan 40000, wordt het foutbericht 'Constraint failed' weergegeven; waarom? Omdat we Check-beperking hebben toegepast op een salaris dat alleen die records toelaat waarvan het werknemerssalaris hoger is dan 40000.

We zullen een record invoegen in de werknemertabel waar het salaris van een werknemer hoger is dan 40000.

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

Om te controleren of gegevens in een tabel zijn ingevoegd, gebruiken we de onderstaande query:

SELECT * FROM EMPLOYEES;

Een werknemersrecord is met succes in de tabel ingevoegd toen we het werknemerssalaris hoger dan 40000 hebben ingevoerd.

Voorbeeld 2: We zullen een tabel maken en een controlebeperking op kolomniveau definiëren voor meer dan één kolom in een 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' )));

We hebben een tabelnaam Manager gemaakt in de bovenstaande query en bepaalde kolommen gedefinieerd. We hebben controlebeperkingen gespecificeerd op de salariskolom in een tabel Manager. De beperking zelf zegt dat de salariskolom alleen die gegevens accepteert waarvan het managersalaris hoger is dan 60000; als het salaris lager is dan 60000, treden er fouten in de beperking op en is de afdeling van de manager Oracle, FMW, Testing en Java.

Om te controleren of de CHECK-beperking is gedefinieerd in de Salariskolom en Afdelingskolom, gebruiken we de onderstaande query:

SHOW CREATE TABLE MANAGER;

We zullen een record invoegen in de Manager-tabel waar het salaris van een manager minder is dan 60000 en de afdeling Java is.

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

Wanneer we een managerrecord hebben ingevoegd waarvan het salaris lager is dan 60000, wordt het foutbericht 'Constraint failed' weergegeven; waarom? Omdat we de controlebeperking hebben toegepast op een salaris dat alleen die records toestaat waarvan het managersalaris hoger is dan 60000. Maar er is geen beperkingsfout opgetreden in de kolom Afdeling omdat we de waarden hebben ingevoegd die in de kolom mogen worden ingevoegd,

We zullen een record invoegen in de Manager-tabel waar het salaris van een manager groter is dan 60000 en de afdeling Java is.

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

Om te controleren of gegevens in een tabel zijn ingevoegd, gebruiken we de onderstaande query:

SELECT * FROM MANAGER;

Het managerrecord is met succes in de tabel ingevoegd toen we het Managersalaris hoger dan 60000 en de afdelingsnaam Java invoerden.

Beperking voor controle op tabelniveau

De controlebeperking wordt aan het einde van de tabel gedefinieerd, ook wel de controlebeperking op tabelniveau genoemd. Syntaxis van controlebeperking op tabelniveau als volgt,

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

Voorbeeld 1: We zullen een tabel maken en een controlebeperking op tabelniveau definiëren voor een van de volgende kolommen in een 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));

In de bovenstaande zoekopdracht hebben we een tabel gemaakt met de naam Werknemers en bepaalde kolommen gedefinieerd. In de tabel Werknemer hebben we controlebeperkingen gespecificeerd op het salaris kolom. De beperking zelf zegt dat de salariskolom alleen die gegevens accepteert waarvan het werknemerssalaris hoger is dan 40000; als het salaris minder dan 40000 beperkingen is, zullen er overtredingsfouten optreden.

Om te controleren of de beperking CHECK is gedefinieerd in de kolom Salaris, gebruiken we de onderstaande zoekopdracht:

SHOW CREATE TABLE EMPLOYEES;

We zullen een record invoegen in de werknemertabel waar het salaris van een werknemer lager is dan 40000.

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

Wanneer we een werknemersrecord invoegen waarvan het salaris lager is dan 40000, wordt het foutbericht 'Constraint failed' weergegeven; waarom? Omdat we Check-beperking hebben toegepast op een salaris dat alleen die records toelaat waarvan het werknemerssalaris hoger is dan 40000.

We zullen een record invoegen in de werknemertabel waar het salaris van een werknemer hoger is dan 40000.

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

Om te controleren of gegevens in een tabel zijn ingevoegd, gebruiken we de onderstaande query:

SELECT * FROM EMPLOYEES;

Een werknemersrecord is met succes in de tabel ingevoegd toen we het werknemerssalaris hoger dan 40000 hebben ingevoerd.

Voorbeeld 2: We zullen een tabel maken en een controlebeperking op kolomniveau definiëren voor meer dan één kolom in een 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')));

We hebben een tabelnaam gemaakt Manager in de bovenstaande query en bepaalde kolommen gedefinieerd. We hebben controlebeperkingen gespecificeerd voor het salaris kolom in een tabel Manager. De beperking zelf zegt dat de salariskolom alleen die gegevens accepteert waarvan het managersalaris hoger is dan 60000; als het salaris lager is dan 60000, treden er fouten in de beperking op en is de afdeling van de manager Oracle, FMW, Testing en Java.

Om te controleren of de CHECK-beperking is gedefinieerd in de Salariskolom en Afdelingskolom, gebruiken we de onderstaande query:

SHOW CREATE TABLE MANAGER;

We zullen een record invoegen in de Manager-tabel waar het salaris van een manager lager is dan 60000 en de afdeling Java is.

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

Wanneer we een managerrecord hebben ingevoegd waarvan het salaris lager is dan 60000, wordt het foutbericht 'Constraint failed' weergegeven; waarom? Omdat we de controlebeperking hebben toegepast op een salaris dat alleen die records toestaat waarvan het managersalaris hoger is dan 60000. Maar er is geen beperkingsfout opgetreden in de kolom Afdeling omdat we de waarden hebben ingevoegd die in de kolom mogen worden ingevoegd,

We zullen een record invoegen in de Manager-tabel waar het salaris van een manager groter is dan 60000 en de afdeling Java is.

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

Om te controleren of gegevens in een tabel zijn ingevoegd, gebruiken we de onderstaande query:

SELECT * FROM MANAGER;

Het managerrecord is met succes in de tabel ingevoegd toen we het Managersalaris hoger dan 60000 en de afdelingsnaam Java invoerden.

Beperking controleren met Alter

We hebben een tabel gemaakt en zijn vergeten CHECK CONSTRAINT toe te voegen tijdens het maken van een tabel, en dan moeten we CHECK CONSTRAINT toevoegen aan een tabel. In dergelijke gevallen zullen we het ALTER commando gebruiken om de CHECK CONSTRAINT toe te passen op de bestaande tabel.

Syntaxis van controlebeperking met behulp van Alter als volgt,

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

Voorbeeld 1: Stel dat we een Medewerkers . hebben gemaakt tabel zonder Check Constraints toe te voegen. Nu willen we Check Constraint toevoegen aan een van de kolommen. Dan gebruiken we de onderstaande vraag:

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

Om te controleren of de CHECK-beperking is gedefinieerd op het Salaris kolom, zullen we de onderstaande zoekopdracht gebruiken:

SHOW CREATE TABLE EMPLOYEES;

We zullen een record invoegen in de Werknemerstabel waar het salaris van een werknemer lager is dan 35000.

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

Wanneer we een werknemersrecord hebben ingevoegd waarvan het salaris lager is dan 35000, wordt het foutbericht 'Constraint failed' weergegeven; waarom? Omdat we Check-beperking hebben toegepast op een salaris dat alleen die records toelaat waarvan het werknemerssalaris hoger is dan 35000.

Voorbeeld 2: Stel dat we een Medewerkers . hebben gemaakt tabel zonder Check Constraints toe te voegen. Nu willen we Check Constraint toevoegen aan een van de kolommen. Dan gebruiken we de onderstaande vraag:

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

Om te controleren of de CHECK-beperking is gedefinieerd voor de Stad kolom, zullen we de onderstaande zoekopdracht gebruiken:

SHOW CREATE TABLE EMPLOYEES;

We zullen een record invoegen in de tabel Werknemers waarbij de stad van een werknemer Jaipur is.

SHOW CREATE TABLE EMPLOYEES;

Wanneer we een werknemersrecord hebben ingevoegd waarvan de plaatsnaam Jaipur is, wordt het foutbericht 'Constraint failed' weergegeven; waarom? Omdat we de controlebeperking op Stad hebben toegepast, waardoor alleen die records worden toegestaan ​​met de naam van de stad 'Mumbai', 'Pune', 'Bangalore' of 'Chennai'.

Drop Check-beperking

Stel dat we een CHECK CONSTRAINT hebben gedefinieerd voor de tabelkolommen. Later willen we die BEPERKING uit de kolom verwijderen. Dan zullen we het ALTER commando gebruiken om de CHECK CONSTRAINT te laten vallen.

Syntaxis van Drop Check Constraint als volgt,

ALTER TABLE TABLE_NAME DROP CONSTRAINT CONSTRAINT_NAME;

Voorbeeld 1: Stel dat we Controlebeperking hebben gedefinieerd op een van de kolommen van de tabel Werknemers. Later hebben we besloten om die beperking te laten vallen.

We zullen eerst de gemaakte beperking controleren, gebruik hiervoor de volgende vraag:

SHOW CREATE TABLE EMPLOYEES;

We zullen de onderstaande query schrijven om de beperking met de naam 'City_Constraint' te verwijderen.

ALTER TABLE EMPLOYEES DROP CONSTRAINT City_Constraint;

We zullen opnieuw de SHOW CREATE TABLE-query gebruiken om te controleren of de beperking met succes is verwijderd.

SHOW CREATE TABLE EMPLOYEES;

Voorbeeld 2: Stel dat we Check Constraint hebben gedefinieerd op een van de kolommen van de Manager Table. Later hebben we besloten om die beperking te laten vallen.

We zullen eerst de gemaakte beperking controleren, gebruik hiervoor de volgende vraag:

SHOW CREATE TABLE MANAGER;

We zullen de onderstaande vraag schrijven om de beperking met de naam 'SALARY_CONST' te verwijderen.

ALTER TABLE MANAGER DROP CONSTRAINT SALARY_CONST;

We zullen opnieuw de SHOW CREATE TABLE-query gebruiken om te controleren of de beperking met succes is verwijderd.

SHOW CREATE TABLE MANAGER;


  1. SQL Server:moet ik information_schema-tabellen gebruiken in plaats van sys-tabellen?

  2. Is er zoiets als een zip()-functie in PostgreSQL die twee arrays combineert?

  3. Basisprincipes van SQL Server ALTER TABLE-instructie

  4. Een tabelnaam als variabele