Database
 sql >> Base de données >  >> RDS >> Database

Comment modifier la colonne de NULL à NOT NULL

Parfois, vous devrez peut-être changer une colonne nullable avec des valeurs NULL en une sans valeurs NULL. Dans cet article, nous verrons comment modifier une colonne de valeurs NULL à NOT NULL. Vous pouvez utiliser ces étapes pour changer la colonne de NULL à NOT NULL dans MySQL, PostgreSQL et SQL Server.


Comment modifier une colonne de Null à Non Null

Voici les étapes pour modifier la colonne de NULL à NOT NULL.


1. Mettre à jour le tableau pour supprimer les valeurs nulles.

La première étape consiste à supprimer les valeurs nulles de notre colonne. Disons que vous avez une table ventes(id, montant, date_commande)

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 |
+------+--------+------------+

Comme vous pouvez le voir, le tableau ci-dessus contient des valeurs nulles dans order_date et montant colonnes.

Supposons que vous souhaitiez modifier la colonne du montant de null à non null. Nous allons donc d'abord supprimer les valeurs nulles de cette colonne à l'aide de l'instruction 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 |
+------+--------+------------+

De même, si vous souhaitez modifier order_date colonne de null à non null, mettez d'abord à jour les valeurs nulles en valeurs non nulles, comme indiqué ci-dessous.

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. Modifier le tableau et modifier la colonne

Ensuite, nous allons changer la colonne de montant de null à non null, en utilisant l'instruction ALTER TABLE.

En voici la syntaxe.

ALTER TABLE table_name ALTER COLUMN col_name data_type NOT NULL;

Remplacez table_name, col_name et data_type par le nom de la table, le nom de la colonne et le type de données respectivement.

Voici la requête SQL pour changer la colonne du montant de NULL à 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;

De même, voici les requêtes SQL pour changer la colonne order_date de NULL à 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;

Nous vérifions la modification ci-dessus en exécutant la commande describe table dans 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    |       |
+------------+---------+------+-----+---------+-------+

Vous verrez que les colonnes montant et date_commande ne contiennent PAS de valeur pour la colonne NULL indiquant qu'elles ne sont pas autorisées à stocker des valeurs NULL.

Ubiq facilite la visualisation des données et leur suivi dans des tableaux de bord en temps réel. Essayez Ubiq gratuitement.