A Check Constraint no SQL é a regra ou conjunto de regras usadas para limitar o intervalo de dados que pode ser inserido em uma coluna da tabela. A restrição de verificação é usada na tabela e na coluna. Assim, podemos dizer que a restrição de verificação pode ser criada no nível da coluna e no nível da tabela.
Verifique a restrição aplicada na coluna e permitirá determinados valores para esta coluna durante a inserção na coluna. Se você definir uma restrição CHECK em uma tabela, ela poderá limitar os valores em determinadas colunas com base nos valores de outras colunas na linha. Podemos aplicar várias restrições de verificação em uma única tabela.
Vejamos alguns exemplos para entender melhor o conceito de Check Constraint.
Restrição de verificação de nível de coluna
A restrição de verificação é definida logo após o nome da coluna, conhecida como Restrição de Verificação de Nível de Coluna. Sintaxe da restrição de verificação de nível de coluna da seguinte forma,
CREATE TABLE TABLE_NAME(COLUMN_NAME1 DATATYPE(SIZE), COLUMN_NAME2 DATATYPE(SIZE) CHECK(COLUMN_NAME CONDITION), COLUMN_NAME3 DATATYPE(SIZE));
Por exemplo, vamos criar uma tabela e definir uma restrição de verificação em nível de coluna em uma das seguintes colunas em uma tabela:
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);
Na consulta acima, criamos uma tabela chamada Employees e definiu certas colunas. Na tabela Employee, especificamos restrições de verificação no salário coluna. A própria restrição diz que a coluna de salário aceitará apenas os dados cujo salário do funcionário seja maior que 40.000; se o salário for inferior a 40.000, ocorrerão erros de violação de restrição.
Para verificar se a restrição CHECK está definida no Salary coluna, usaremos a consulta abaixo:
SHOW CREATE TABLE EMPLOYEES;
Vamos inserir um registro na tabela Employee onde o salário de um funcionário for menor que 40.000.
INSERT INTO EMPLOYEES VALUES (1171101, 'Parag Chordia', 38000, 'Pune', 'Java');
Quando inserimos um registro de funcionário cujo salário é inferior a 40.000, é exibida a mensagem de erro de falha de restrição; porque? Porque aplicamos a restrição Check em um salário que permitirá apenas os registros cujo salário do funcionário seja maior que 40.000.
Vamos inserir um registro na tabela Employee onde o salário de um funcionário for maior que 40.000.
INSERT INTO EMPLOYEES VALUES (1171101, 'Parag Chordia', 45000, 'Pune', 'Java');
Para verificar se os dados estão inseridos em uma tabela, usaremos a consulta abaixo:
SELECT * FROM EMPLOYEES;
Um registro de funcionário é inserido com sucesso na tabela, pois inserimos o salário do funcionário maior que 40.000.
Exemplo 2: Criaremos uma tabela e definiremos uma restrição de verificação em nível de coluna em mais de uma coluna em uma tabela.
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' )));
Criamos um nome de tabela Manager na consulta acima e definimos certas colunas. Especificamos restrições de verificação na coluna de salário em uma tabela Manager. A própria restrição diz que a coluna de salário aceitará apenas aqueles dados cujo salário de gerente seja maior que 60.000; se o salário for inferior a 60.000, ocorrerão erros de violação de restrição e o departamento do gerente será Oracle, FMW, Testing e Java.
Para verificar se a restrição CHECK está definida na coluna Salary e na coluna Department, usaremos a consulta abaixo:
SHOW CREATE TABLE MANAGER;
Vamos inserir um registro na tabela Gerente onde o salário de um gerente é menor que 60.000 e o Departamento é Java.
INSERT INTO MANAGER VALUES(1, 'Bhavesh Bardiya', 59500, 'Java');
Quando inserimos um registro de gerente cujo salário é inferior a 60.000, é exibida a mensagem de erro de falha de restrição; porque? Porque aplicamos a restrição Check em um salário que permitirá apenas aqueles registros cujo salário de gerente seja maior que 60.000. Mas não ocorreu nenhum erro de restrição na coluna Departamento porque inserimos aqueles valores cuja coluna permitia inserir,
Vamos inserir um registro na tabela Gerente onde o salário de um gerente é maior que 60.000, e o Departamento é Java.
INSERT INTO MANAGER VALUES(1, 'Bhavesh Bardiya', 62000, 'Java');
Para verificar se os dados estão inseridos em uma tabela, usaremos a consulta abaixo:
SELECT * FROM MANAGER;
O registro do gerente é inserido com sucesso na tabela, pois inserimos o Salário do Gerente maior que 60.000 e o nome do Departamento Java.
Restrição de verificação de nível de tabela
A restrição de verificação é definida no final da tabela, conhecida como a restrição de verificação de nível de tabela. Sintaxe da restrição de verificação de nível de tabela da seguinte forma,
CREATE TABLE TABLE_NAME(COLUMN_NAME1 DATATYPE(SIZE), COLUMN_NAME2 DATATYPE(SIZE), COLUMN_NAME3 DATATYPE(SIZE), CONSTRAINT CONSTAINT_NAME CHECK(COLUMN_NAME CONDITION));
Exemplo 1: Criaremos uma tabela e definiremos uma restrição de verificação de nível de tabela em uma das seguintes colunas em uma tabela.
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));
Na consulta acima, criamos uma tabela chamada Employees e definiu certas colunas. Na tabela Employee, especificamos restrições de verificação no salário coluna. A própria restrição diz que a coluna de salário aceitará apenas os dados cujo salário do funcionário seja maior que 40.000; se o salário for inferior a 40.000 restrições, ocorrerão erros de violação.
Para verificar se a restrição CHECK está definida na coluna Salary, usaremos a consulta abaixo:
SHOW CREATE TABLE EMPLOYEES;
Vamos inserir um registro na tabela Employee onde o salário de um funcionário for menor que 40.000.
INSERT INTO EMPLOYEES VALUES (1171101, 'Naman Sharma', 38000, 'Pune', 'Java');
Quando inserimos um registro de funcionário cujo salário é inferior a 40.000, é exibida a mensagem de erro de falha de restrição; porque? Porque aplicamos a restrição Check em um salário que permitirá apenas os registros cujo salário do funcionário seja maior que 40.000.
Vamos inserir um registro na tabela Employee onde o salário de um funcionário for maior que 40.000.
INSERT INTO EMPLOYEES VALUES (1171101, 'Naman Sharma', 45000, 'Pune', 'Java');
Para verificar se os dados estão inseridos em uma tabela, usaremos a consulta abaixo:
SELECT * FROM EMPLOYEES;
Um registro de funcionário é inserido com sucesso na tabela, pois inserimos o salário do funcionário maior que 40.000.
Exemplo 2: Criaremos uma tabela e definiremos uma restrição de verificação em nível de coluna em mais de uma coluna em uma tabela.
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')));
Criamos um nome de tabela Gerente na consulta acima e definiu certas colunas. Especificamos restrições de cheque no salário coluna em um gerenciador de tabelas. A própria restrição diz que a coluna de salário aceitará apenas aqueles dados cujo salário de gerente seja maior que 60.000; se o salário for inferior a 60.000, ocorrerão erros de violação de restrição e o departamento do gerente será Oracle, FMW, Testing e Java.
Para verificar se a restrição CHECK está definida na coluna Salary e na coluna Department, usaremos a consulta abaixo:
SHOW CREATE TABLE MANAGER;
Vamos inserir um registro na tabela Gerente onde o salário de um gerente é menor que 60.000 e o Departamento é Java.
INSERT INTO MANAGER VALUES(1, 'Surili Jain', 59500, 'Java');
Quando inserimos um registro de gerente cujo salário é inferior a 60.000, é exibida a mensagem de erro de falha de restrição; porque? Porque aplicamos a restrição Check em um salário que permitirá apenas aqueles registros cujo salário de gerente seja maior que 60.000. Mas não ocorreu nenhum erro de restrição na coluna Departamento porque inserimos aqueles valores cuja coluna permitia inserir,
Vamos inserir um registro na tabela Gerente onde o salário de um gerente é maior que 60.000, e o Departamento é Java.
INSERT INTO MANAGER VALUES(1, 'Surili Jain', 62500, 'Java');
Para verificar se os dados estão inseridos em uma tabela, usaremos a consulta abaixo:
SELECT * FROM MANAGER;
O registro do gerente é inserido com sucesso na tabela, pois inserimos o Salário do Gerente maior que 60.000 e o nome do Departamento Java.
Verificar restrição usando alterar
Criamos uma tabela e esquecemos de adicionar CHECK CONSTRAINT ao criar uma tabela e, em seguida, precisamos adicionar CHECK CONSTRAINT em uma tabela. Nesses casos, usaremos o comando ALTER para aplicar o CHECK CONSTRAINT na tabela existente.
Sintaxe de Check Constraint usando Alter como segue,
ALTER TABLE TABLE_NAME ADD CONSTRAINT CONSTRAINT_NAME CHECK (COLUMN_NAME CONDITION);
Exemplo 1: Suponha que criamos um Funcionários tabela sem adicionar restrições de verificação. Agora queremos adicionar Check Constraint em uma das colunas. Em seguida, usaremos a consulta abaixo:
ALTER TABLE EMPLOYEES ADD CONSTRAINT Sal_Constraint CHECK (SALARY > 35000);
Para verificar se a restrição CHECK está definida no Salary coluna, usaremos a consulta abaixo:
SHOW CREATE TABLE EMPLOYEES;
Vamos inserir um registro na tabela Employee onde o salário de um funcionário for menor que 35.000.
INSERT INTO EMPLOYEES VALUES (1001, 'Abhinav Patil', 30000, 'Mumbai', 'Testing');
Quando inserimos um registro de funcionário cujo salário é inferior a 35.000, a mensagem de erro de falha de restrição é exibida; porque? Porque aplicamos a restrição Check em um salário que permitirá apenas os registros cujo salário do funcionário seja maior que 35.000.
Exemplo 2: Suponha que criamos um Funcionários tabela sem adicionar restrições de verificação. Agora queremos adicionar Check Constraint em uma das colunas. Em seguida, usaremos a consulta abaixo:
ALTER TABLE EMPLOYEES ADD CONSTRAINT City_Constraint CHECK (CITY IN ('Mumbai', 'Pune', 'Bangalore', 'Chennai'));
Para verificar se a restrição CHECK está definida na Cidade coluna, usaremos a consulta abaixo:
SHOW CREATE TABLE EMPLOYEES;
Vamos inserir um registro na tabela Employee onde a cidade de um funcionário é Jaipur.
SHOW CREATE TABLE EMPLOYEES;
Quando inserimos um registro de funcionário cujo nome da cidade é Jaipur, a mensagem de erro de falha de restrição é exibida; porque? Porque aplicamos a restrição de verificação na cidade, que permitirá apenas os registros em que o nome da cidade será 'Mumbai', 'Pune', 'Bangalore' ou 'Chennai'.
Restrição de descarte de cheque
Suponha que tenhamos definido um CHECK CONSTRAINT nas colunas da tabela. Mais tarde, queremos excluir essa CONSTRAINT da coluna. Em seguida, usaremos o comando ALTER para descartar a CHECK CONSTRAINT.
Sintaxe de Drop Check Constraint como segue,
ALTER TABLE TABLE_NAME DROP CONSTRAINT CONSTRAINT_NAME;
Exemplo 1: Suponha que tenhamos definido Check Constraint em uma das colunas da tabela Employees. Mais tarde, decidimos abandonar essa restrição.
Vamos primeiro verificar a restrição criada, para isso use a seguinte consulta:
SHOW CREATE TABLE EMPLOYEES;
Vamos escrever a consulta abaixo para eliminar a restrição chamada 'City_Constraint'.
ALTER TABLE EMPLOYEES DROP CONSTRAINT City_Constraint;
Usaremos novamente a consulta SHOW CREATE TABLE para verificar se a restrição foi eliminada com sucesso.
SHOW CREATE TABLE EMPLOYEES;
Exemplo 2: Suponha que tenhamos definido Check Constraint em uma das colunas da Manager Table. Mais tarde, decidimos abandonar essa restrição.
Vamos primeiro verificar a restrição criada, para isso use a seguinte consulta:
SHOW CREATE TABLE MANAGER;
Vamos escrever a consulta abaixo para eliminar a restrição chamada 'SALARY_CONST'.
ALTER TABLE MANAGER DROP CONSTRAINT SALARY_CONST;
Usaremos novamente a consulta SHOW CREATE TABLE para verificar se a restrição foi eliminada com sucesso.
SHOW CREATE TABLE MANAGER;