Database
 sql >> Database >  >> RDS >> Database

Controlla Vincolo in SQL

Il controllo vincolo in SQL è la regola o l'insieme di regole utilizzato per limitare l'intervallo di dati che può essere inserito in una colonna di tabella. Il vincolo di controllo viene utilizzato sia sulla tabella che sulla colonna. Quindi possiamo dire che il vincolo di controllo può essere creato a livello di colonna e a livello di tabella.

Seleziona Vincolo applicato sulla colonna e consentirà determinati valori per questa colonna durante l'inserimento nella colonna. Se si definisce un vincolo CHECK su una tabella, è possibile limitare i valori in alcune colonne in base ai valori in altre colonne nella riga. Possiamo applicare più vincoli di controllo in una singola tabella.

Vediamo alcuni esempi per comprendere più chiaramente il concetto di Check Constraint.

Vincolo di verifica del livello di colonna

Il vincolo di controllo è definito subito dopo il nome della colonna, noto come vincolo di controllo a livello di colonna. Sintassi del vincolo di controllo del livello di colonna come segue,

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

Ad esempio, creeremo una tabella e definiremo un vincolo di controllo a livello di colonna su una delle seguenti colonne in una tabella:

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

Nella query precedente, abbiamo creato una tabella denominata Impiegati e definito alcune colonne. Nella tabella Impiegato, abbiamo specificato i vincoli di controllo sullo stipendio colonna. Il vincolo stesso dice che la colonna stipendio accetterà solo quei dati il ​​cui stipendio del dipendente è maggiore di 40000; se lo stipendio è inferiore a 40000, si verificheranno errori di violazione del vincolo.

Per verificare che il vincolo CHECK sia definito sullo Salario colonna, utilizzeremo la query seguente:

SHOW CREATE TABLE EMPLOYEES;

Inseriremo un record nella tabella Impiegato in cui lo stipendio di un dipendente è inferiore a 40000.

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

Quando abbiamo inserito un record di un dipendente il cui stipendio è inferiore a 40000, viene visualizzato il messaggio di errore di vincolo fallito; perché? Perché abbiamo applicato il vincolo Check su uno stipendio che consentirà solo quei record il cui stipendio dei dipendenti è maggiore di 40000.

Inseriremo un record nella tabella Impiegato in cui lo stipendio di un dipendente è maggiore di 40000.

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

Per verificare se i dati sono inseriti in una tabella, utilizzeremo la query seguente:

SELECT * FROM EMPLOYEES;

Un record del dipendente è stato inserito correttamente nella tabella quando abbiamo inserito lo stipendio del dipendente maggiore di 40000.

Esempio 2: Creeremo una tabella e definiremo un vincolo di controllo a livello di colonna su più di una colonna in una tabella.

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

Abbiamo creato un nome di tabella Manager nella query precedente e definito alcune colonne. Abbiamo specificato i vincoli di controllo sulla colonna salario in una tabella Manager. Il vincolo stesso dice che la colonna stipendio accetterà solo quei dati il ​​cui stipendio del manager è maggiore di 60000; se lo stipendio è inferiore a 60000, si verificheranno errori di violazione dei vincoli e il dipartimento del manager è Oracle, FMW, Testing e Java.

Per eseguire un controllo incrociato che il vincolo CHECK sia definito nella colonna Stipendio e nella Colonna Dipartimento, utilizzeremo la query seguente:

SHOW CREATE TABLE MANAGER;

Inseriremo un record nella tabella Manager dove lo stipendio di un manager è inferiore a 60000 e il Dipartimento è Java.

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

Quando abbiamo inserito un record manager il cui stipendio è inferiore a 60000, viene visualizzato il messaggio di errore di vincolo fallito; perché? Perché abbiamo applicato il vincolo di controllo su uno stipendio che consentirà solo quei record il cui stipendio del manager è maggiore di 60000. Ma non si è verificato alcun errore di vincolo nella colonna Dipartimento perché abbiamo inserito quei valori la cui colonna poteva essere inserita,

Inseriremo un record nella tabella Manager in cui lo stipendio di un manager è maggiore di 60000 e il Dipartimento è Java.

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

Per verificare se i dati sono inseriti in una tabella, utilizzeremo la query seguente:

SELECT * FROM MANAGER;

Il record del manager è stato inserito correttamente nella tabella poiché abbiamo inserito uno stipendio del manager maggiore di 60000 e il nome del dipartimento Java.

Vincolo di controllo a livello di tabella

Il vincolo di verifica è definito alla fine della tabella, noto come vincolo di verifica a livello di tabella. Sintassi del vincolo di controllo a livello di tabella come segue,

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

Esempio 1: Creeremo una tabella e definiremo un vincolo di controllo a livello di tabella su una delle seguenti colonne in una tabella.

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

Nella query precedente, abbiamo creato una tabella denominata Impiegati e definito alcune colonne. Nella tabella Impiegato, abbiamo specificato i vincoli di controllo sullo stipendio colonna. Il vincolo stesso dice che la colonna stipendio accetterà solo quei dati il ​​cui stipendio del dipendente è maggiore di 40000; se lo stipendio è inferiore a 40000 vincoli, si verificheranno errori di violazione.

Per eseguire un controllo incrociato che il vincolo CHECK sia definito nella colonna Stipendio, utilizzeremo la query seguente:

SHOW CREATE TABLE EMPLOYEES;

Inseriremo un record nella tabella Impiegato in cui lo stipendio di un dipendente è inferiore a 40000.

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

Quando abbiamo inserito un record di un dipendente il cui stipendio è inferiore a 40000, viene visualizzato il messaggio di errore di vincolo fallito; perché? Perché abbiamo applicato il vincolo Check su uno stipendio che consentirà solo quei record il cui stipendio dei dipendenti è maggiore di 40000.

Inseriremo un record nella tabella Impiegato in cui lo stipendio di un dipendente è maggiore di 40000.

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

Per verificare se i dati sono inseriti in una tabella, utilizzeremo la query seguente:

SELECT * FROM EMPLOYEES;

Un record del dipendente è stato inserito correttamente nella tabella quando abbiamo inserito lo stipendio del dipendente maggiore di 40000.

Esempio 2: Creeremo una tabella e definiremo un vincolo di controllo a livello di colonna su più di una colonna in una tabella.

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

Abbiamo creato un nome di tabella Manager nella query precedente e definito alcune colonne. Abbiamo specificato vincoli di controllo sullo stipendio colonna in una tabella Manager. Il vincolo stesso dice che la colonna stipendio accetterà solo quei dati il ​​cui stipendio del manager è maggiore di 60000; se lo stipendio è inferiore a 60000, si verificheranno errori di violazione dei vincoli e il dipartimento del manager è Oracle, FMW, Testing e Java.

Per eseguire un controllo incrociato che il vincolo CHECK sia definito nella colonna Stipendio e nella Colonna Dipartimento, utilizzeremo la query seguente:

SHOW CREATE TABLE MANAGER;

Inseriremo un record nella tabella Manager dove lo stipendio di un manager è inferiore a 60000 e il Dipartimento è Java.

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

Quando abbiamo inserito un record manager il cui stipendio è inferiore a 60000, viene visualizzato il messaggio di errore di vincolo fallito; perché? Perché abbiamo applicato il vincolo di controllo su uno stipendio che consentirà solo quei record il cui stipendio del manager è maggiore di 60000. Ma non si è verificato alcun errore di vincolo nella colonna Dipartimento perché abbiamo inserito quei valori la cui colonna poteva essere inserita,

Inseriremo un record nella tabella Manager in cui lo stipendio di un manager è maggiore di 60000 e il Dipartimento è Java.

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

Per verificare se i dati sono inseriti in una tabella, utilizzeremo la query seguente:

SELECT * FROM MANAGER;

Il record del manager è stato inserito correttamente nella tabella poiché abbiamo inserito uno stipendio del manager maggiore di 60000 e il nome del dipartimento Java.

Controlla il vincolo usando Alter

Abbiamo creato una tabella e ci siamo dimenticati di aggiungere CHECK CONSTRAINT durante la creazione di una tabella, quindi è necessario aggiungere CHECK CONSTRAINT in una tabella. In questi casi, utilizzeremo il comando ALTER per applicare il CHECK CONSTRAINT alla tabella esistente.

Sintassi di Verifica vincolo usando Alter come segue,

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

Esempio 1: Supponiamo di aver creato un Dipendenti tabella senza aggiungere vincoli di controllo. Ora vogliamo aggiungere Check Constraint su una delle colonne. Quindi utilizzeremo la query seguente:

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

Per verificare che il vincolo CHECK sia definito sullo Salario colonna, utilizzeremo la query seguente:

SHOW CREATE TABLE EMPLOYEES;

Inseriremo un record nella tabella Impiegato in cui lo stipendio di un dipendente è inferiore a 35000.

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

Quando abbiamo inserito un record di un dipendente il cui stipendio è inferiore a 35000, viene visualizzato il messaggio di errore di vincolo fallito; perché? Perché abbiamo applicato il vincolo Check su uno stipendio che consentirà solo quei record il cui stipendio dei dipendenti è maggiore di 35000.

Esempio 2: Supponiamo di aver creato un Dipendenti tabella senza aggiungere vincoli di controllo. Ora vogliamo aggiungere Check Constraint su una delle colonne. Quindi utilizzeremo la query seguente:

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

Per verificare che il vincolo CHECK sia definito sulla Città colonna, utilizzeremo la query seguente:

SHOW CREATE TABLE EMPLOYEES;

Inseriremo un record nella tabella Impiegato in cui la città di un dipendente è Jaipur.

SHOW CREATE TABLE EMPLOYEES;

Quando abbiamo inserito un record di un dipendente il cui nome di città è Jaipur, viene visualizzato il messaggio di errore di vincolo fallito; perché? Perché abbiamo applicato il vincolo Check alla città che consentirà solo i record in cui il nome della città sarà "Mumbai", "Pune", "Bangalore" o "Chennai".

Rilascio vincolo controllo

Supponiamo di aver definito un CHECK CONSTRAINT sulle colonne della tabella. Successivamente vogliamo eliminare quel VINCOLO dalla colonna. Quindi useremo il comando ALTER per eliminare il CHECK CONSTRAINT.

Sintassi di Drop Check Constraint come segue,

ALTER TABLE TABLE_NAME DROP CONSTRAINT CONSTRAINT_NAME;

Esempio 1: Supponiamo di aver definito Check Constraint su una delle colonne della tabella Employees. Successivamente, abbiamo deciso di eliminare questo vincolo.

Verificheremo prima il vincolo creato, per questo uso la seguente query:

SHOW CREATE TABLE EMPLOYEES;

Scriveremo la query seguente per eliminare il vincolo denominato "City_Constraint".

ALTER TABLE EMPLOYEES DROP CONSTRAINT City_Constraint;

Utilizzeremo nuovamente la query SHOW CREATE TABLE per verificare che il vincolo sia stato eliminato correttamente.

SHOW CREATE TABLE EMPLOYEES;

Esempio 2: Supponiamo di aver definito Check Constraint su una delle colonne della Manager Table. Successivamente, abbiamo deciso di eliminare questo vincolo.

Verificheremo prima il vincolo creato, per questo uso la seguente query:

SHOW CREATE TABLE MANAGER;

Scriveremo la query seguente per eliminare il vincolo denominato "SALARY_CONST".

ALTER TABLE MANAGER DROP CONSTRAINT SALARY_CONST;

Utilizzeremo nuovamente la query SHOW CREATE TABLE per verificare che il vincolo sia stato eliminato correttamente.

SHOW CREATE TABLE MANAGER;