À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.