Resumo : neste tutorial, você aprenderá sobre NOT NULL
as restrições do MySQL, incluindo a definição de uma NOT NULL
restrição para uma coluna, a adição de uma NOT NULL
restrição a uma coluna existente e a remoção de uma NOT NULL
restrição de uma coluna.
Introdução às restrições NOT NULL do MySQL
Uma NOT NULL
restrição garante que os valores armazenados em uma coluna não sejam NULL . A sintaxe para definir uma NOT NULL
restrição é a seguinte:
column_name data_type NOT NULL;
Linguagem de código: SQL (linguagem de consulta estruturada) ( sql )
Uma coluna pode ter apenas uma NOT NULL
restrição, o que impõe a regra de que a coluna não deve conter nenhum valor NULL.
Em outras palavras, se você tentar atualizar ou inserir um valor NULL em uma coluna NOT NULL, o MySQL emitirá um erro.
Por exemplo, o seguinte cria a tasks
tabela usando a CREATE TABLE
instrução:
CREATE TABLE tasks (
id INT AUTO_INCREMENT PRIMARY KEY,
title VARCHAR(255) NOT NULL,
start_date DATE NOT NULL,
end_date DATE
);
Linguagem de código: SQL (linguagem de consulta estruturada) ( sql )
Na tasks
tabela, definimos explicitamente as colunas title
e start_date
com NOT NULL
restrições.
A id
coluna possui a PRIMARY KEY
restrição, portanto, inclui implicitamente uma NOT NULL
restrição.
A end_date
coluna pode ter valores NULL, pois ao criar uma nova tarefa, você pode não saber sua data de conclusão
O seguinte mostra a estrutura da tabela de tarefas:
DESC tasks;
Saída:
+------------+--------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+------------+--------------+------+-----+---------+----------------+
| id | int | NO | PRI | NULL | auto_increment |
| title | varchar(255) | NO | | NULL | |
| start_date | date | NO | | NULL | |
| end_date | date | YES | | NULL | |
+------------+--------------+------+-----+---------+----------------+
4 rows in set (0.01 sec)
Linguagem de código: PHP ( php )
É uma boa prática ter a NOT NULL
restrição em todas as colunas de uma tabela, a menos que você tenha um motivo específico para não fazê-lo.
Geralmente, NULL
os valores podem complicar suas consultas porque você precisa usar funções relacionadas a NULL, como ISNULL()
, IFNULL()
e NULLIF()
para lidar com eles.
Adicionando uma restrição NOT NULL a uma coluna existente
Normalmente, você adiciona NOT NULL
restrições às colunas ao criar a tabela. No entanto, você pode querer adicionar uma NOT NULL
restrição a uma coluna de uma tabela existente. Nesse caso, você usa as seguintes etapas:
- Primeiro, verifique os valores atuais da coluna, se houver algum
NULL
valor. - Segundo, atualize o
NULL
para não-NULL
. - Terceiro, modifique a coluna com uma
NOT NULL
restrição.
Considere o seguinte exemplo.
Primeiro, insira algumas linhas na tasks
tabela:
INSERT INTO tasks(title ,start_date, end_date)
VALUES('Learn MySQL NOT NULL constraint', '2017-02-01','2017-02-02'),
('Check and update NOT NULL constraint to your database', '2017-02-01',NULL);
Linguagem de código: SQL (linguagem de consulta estruturada) ( sql )
Se desejar exigir que os usuários forneçam uma data de término estimada ao criar uma nova tarefa, você poderá adicionar uma restrição NOT NULL à end_date
coluna da tasks
tabela.
Segundo, encontre as linhas NULLs
na coluna end_date
usando o IS NULL
operador:
SELECT * FROM tasks
WHERE end_date IS NULL;
Linguagem de código: SQL (linguagem de consulta estruturada) ( sql )
Saída:
+----+-------------------------------------------------------+------------+----------+
| id | title | start_date | end_date |
+----+-------------------------------------------------------+------------+----------+
| 2 | Check and update NOT NULL constraint to your database | 2017-02-01 | NULL |
+----+-------------------------------------------------------+------------+----------+
1 row in set (0.00 sec)
Linguagem de código: PHP ( php )
A consulta retornou uma linha NULL
na coluna end_date
.
Terceiro, atualize os NULL
valores para valores não nulos. Nesse caso, você pode criar uma regra que defina uma semana após a data de início quando end_date for NULL.
UPDATE tasks
SET
end_date = start_date + 7
WHERE
end_date IS NULL;
Linguagem de código: SQL (linguagem de consulta estruturada) ( sql )
Esta consulta verifica a atualização:
SELECT * FROM tasks;
Linguagem de código: SQL (linguagem de consulta estruturada) ( sql )
Saída:
+----+-------------------------------------------------------+------------+------------+
| id | title | start_date | end_date |
+----+-------------------------------------------------------+------------+------------+
| 1 | Learn MySQL NOT NULL constraint | 2017-02-01 | 2017-02-02 |
| 2 | Check and update NOT NULL constraint to your database | 2017-02-01 | 2017-02-08 |
+----+-------------------------------------------------------+------------+------------+
2 rows in set (0.00 sec)
Linguagem de código: PHP ( php )
Terceiro, adicione uma NOT NULL
restrição à end_date
coluna usando a seguinte ALTER TABLE
instrução:
ALTER TABLE table_name
CHANGE
old_column_name
new_column_name column_definition;
Linguagem de código: SQL (linguagem de consulta estruturada) ( sql )
Nesse caso, os nomes das colunas antigas e novas são iguais, exceto que a coluna deve ter uma NOT NULL
restrição:
ALTER TABLE tasks
CHANGE
end_date
end_date DATE NOT NULL;
Linguagem de código: SQL (linguagem de consulta estruturada) ( sql )
Finalmente, verifique a mudança usando a DESCRIBE
instrução:
DESC tasks;
Linguagem de código: SQL (linguagem de consulta estruturada) ( sql )
Saída:
+------------+--------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+------------+--------------+------+-----+---------+----------------+
| id | int | NO | PRI | NULL | auto_increment |
| title | varchar(255) | NO | | NULL | |
| start_date | date | NO | | NULL | |
| end_date | date | NO | | NULL | |
+------------+--------------+------+-----+---------+----------------+
4 rows in set (0.00 sec)
Linguagem de código: PHP ( php )
Como você pode ver na saída, a NOT NULL
restrição foi adicionada à end_date
coluna com sucesso.
Removendo uma restrição NOT NULL
Para eliminar uma NOT NULL
restrição para uma coluna, você usa a ALTER TABLE..MODIFY
instrução:
ALTER TABLE table_name
MODIFY column_name column_definition;
Linguagem de código: SQL (linguagem de consulta estruturada) ( sql )
Observe que a definição da coluna (column_definition) deve reafirmar a definição da coluna original sem a NOT NULL
restrição.
Por exemplo, a instrução a seguir remove a NOT NULL
restrição da end_date
coluna da tasks
tabela:
ALTER TABLE tasks
MODIFY end_date DATE;
Linguagem de código: SQL (linguagem de consulta estruturada) ( sql )
Esta é a estrutura da tasks
tabela:
DESC tasks;
Saída:
+------------+--------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+------------+--------------+------+-----+---------+----------------+
| id | int | NO | PRI | NULL | auto_increment |
| title | varchar(255) | NO | | NULL | |
| start_date | date | NO | | NULL | |
| end_date | date | YES | | NULL | |
+------------+--------------+------+-----+---------+----------------+
4 rows in set (0.00 sec)
Linguagem de código: PHP ( php )
Resumo
- Use
NOT NULL
restrição para garantir que uma coluna não contenha nenhumNULL
valor. - Use
ALTER TABLE ... CHANGE
a instrução para adicionar umaNOT NULL
restrição a uma coluna existente. - Use
ALTER TABLE ... MODIFY
para eliminar umaNOT NULL
restrição de uma coluna.