Database
 sql >> Base de Dados >  >> RDS >> Database

Como alterar a coluna de NULL para NOT NULL


Às vezes, você pode precisar alterar uma coluna anulável com valores NULL em uma sem valores NULL. Neste artigo, veremos como alterar a coluna de valores NULL para NOT NULL. Você pode usar estas etapas para alterar a coluna de NULL para NOT NULL no MySQL, PostgreSQL e SQL Server.



Como alterar a coluna de nula para não nula


Aqui estão as etapas para alterar a coluna de NULL para NOT NULL.



1. Atualize a tabela para remover valores nulos.


O primeiro passo é remover valores nulos de nossa coluna. Digamos que você tenha uma tabela sales(id, amount, order_date)
mysql> create table sales(id int, amount int,order_date date);

mysql> insert into sales(id, amount)
       values(1, 100),(2,300),(3,45);

mysql> insert into sales(id, order_date)
       values(4,'2020-11-01');

mysql> select * from sales;
+------+--------+------------+
| id   | amount | order_date |
+------+--------+------------+
|    1 |    100 | NULL       |
|    2 |    300 | NULL       |
|    3 |     45 | NULL       |
|    4 |   NULL | 2020-11-01 |
+------+--------+------------+

Como você pode ver, a tabela acima contém valores nulos em order_date e quantidade colunas.

Digamos que você queira alterar a coluna de valor de nulo para não nulo. Então, primeiro vamos remover valores nulos desta coluna usando a instrução UPDATE.
mysql> update sales set amount=0 
       where amount is null;

mysql> select * from sales;
+------+--------+------------+
| id   | amount | order_date |
+------+--------+------------+
|    1 |    100 | NULL       |
|    2 |    300 | NULL       |
|    3 |     45 | NULL       |
|    4 |      0 | 2020-11-01 |
+------+--------+------------+

Da mesma forma, se você quiser alterar order_date coluna de nulo para não nulo, primeiro atualize os valores nulos para valores não nulos, conforme mostrado abaixo.
mysql> update sales set order_date='0000-00-00' 
       where order_date is null;

mysql> select * from sales;
+------+--------+------------+
| id   | amount | order_date |
+------+--------+------------+
|    1 |    100 | 0000-00-00 |
|    2 |    300 | 0000-00-00 |
|    3 |     45 | 0000-00-00 |
|    4 |      0 | 2020-11-01 |
+------+--------+------------+



2. Alterar tabela e modificar coluna


Em seguida, alteraremos a coluna de valor de nulo para não nulo, usando a instrução ALTER TABLE.

Aqui está a sintaxe para isso.
ALTER TABLE table_name ALTER COLUMN col_name data_type NOT NULL;

Substitua table_name, col_name e data_type pelo nome da tabela, nome da coluna e tipo de dados, respectivamente.

Aqui está a consulta SQL para alterar a coluna de valor de NULL para NOT NULL.
For MySQL
---------
ALTER TABLE sales
MODIFY COLUMN amount int NOT NULL;

For SQL Server/PostgreSQL
-------------------------
ALTER TABLE sales
ALTER COLUMN amount int NOT NULL;

Da mesma forma, aqui estão as consultas SQL para alterar a coluna order_date de NULL para NOT NULL
For MySQL
---------
ALTER TABLE sales
MODIFY COLUMN order_date date NOT NULL;

For SQL Server/PostgreSQL
-------------------------
ALTER TABLE sales
ALTER COLUMN order_date date NOT NULL;

Verificamos a alteração acima executando o comando describe table no MySQL.
mysql> describe sales;
+------------+---------+------+-----+---------+-------+
| Field      | Type    | Null | Key | Default | Extra |
+------------+---------+------+-----+---------+-------+
| id         | int(11) | YES  |     | NULL    |       |
| amount     | int(11) | NO   |     | NULL    |       |
| order_date | date    | NO   |     | NULL    |       |
+------------+---------+------+-----+---------+-------+

Você verá que as colunas amount e order_date não contêm nenhum valor para a coluna NULL, indicando que elas não têm permissão para armazenar valores NULL.

O Ubiq facilita a visualização de dados e o monitoramento em painéis em tempo real. Experimente o Ubiq gratuitamente.