English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
Dans ce tutoriel, vous apprendrez à utiliser SQL pour modifier ou modifier une table existante.
Après la création de la table, il est probable que, lorsque vous commencez à l'utiliser, vous vous rendez compte que vous avez oublié de créer la colonne ou la contrainte nécessaires, ou que vous avez spécifié un nom incorrect pour cette colonne.
Dans ce cas, vous pouvez utiliser l'instruction ALTER TABLE pour modifier ou modifier une table existante en ajoutant, modifiant ou supprimant des colonnes.
Considérons-nousshippersLa base de données contient une table dont la structure est la suivante :
+--------------+-------------+------+-----+---------+----------------+ | Champ | Type | Null | Clé | Défaut | Extra | +--------------+-------------+------+-----+---------+----------------+ | shipper_id | int | NON | PRI | NULL | auto_increment | | shipper_name |60) | NON | | NULL | | phone |60) | NON | | NULL | +--------------+-------------+------+-----+---------+----------------+
Nous utiliserons cette table shippers pour toutes les instructions ALTER table.
Supposons maintenant que nous voulions étendre la table shippers existante en ajoutant une colonne. Mais, le problème est comment nous pouvons utiliser la commande SQL pour faire cela ? regardons voir.
La syntaxe de base pour ajouter une nouvelle colonne à une table existante :
ALTER TABLE table_name ADD column_name data_type constraints;
Les instructions suivantes ajoutent une nouvelle colonne fax à la table shippers.
ALTER TABLE shippers ADD fax VARCHAR(20);
Maintenant, après l'exécution des instructions ci-dessus, si vous utilisez la commande DESCRIBE shippers pour voir la structure de la table ; Sur la ligne de commande MySQL, comme suit :
+--------------+-------------+------+-----+---------+----------------+ | Champ | Type | Null | Clé | Défaut | Extra | +--------------+-------------+------+-----+---------+----------------+ | shipper_id | int | NON | PRI | NULL | auto_increment | | shipper_name |60) | NON | | NULL | | phone |60) | NON | | NULL | | fax | varchar(20) | YES | | NULL | | | +--------------+-------------+------+-----+---------+----------------+
Remarque :Si vous souhaitez ajouter une colonne NOT NULL à une table existante, vous devez spécifier explicitementValeur par défaut. Cette valeur par défaut est utilisée pour remplir chaque ligne existante dans la table avec la nouvelle colonne.
Avis :Lorsque vous ajoutez une nouvelle colonne à une table, si vous n'avez pas spécifié NULL ou NOT NULL, la colonne est considérée comme spécifiée NULL.
MySQL ajoute par défaut de nouvelles colonnes à la fin. Cependant, si vous souhaitez ajouter une nouvelle colonne après une colonne spécifique, vous pouvez utiliser la clause AFTER suivante :
mysql> ALTER TABLE shippers ADD fax VARCHAR(20) AFTER shipper_name;
MySQL propose d'abord une autre clause que vous pouvez utiliser pour ajouter une nouvelle colonne en premier lieu dans la table. Remplacez simplement la clause AFTER de l'exemple précédent par FIRST pour ajouter une nouvelle colonne en premier lieu dansshippersAjouter la colonne fax à la début de la table.
Dans MySQL, si vous avez déjà créé une table mais que vous n'êtes pas satisfait de la position des colonnes existantes dans la table, vous pouvez utiliser cette syntaxe pour le modifier à tout moment :
ALTER TABLE table_name MODIFY column_name column_definition AFTER column_name;
La phrase suivante ajoutera la colonnefaxplacershippersdans la tableshipper_nameaprès la colonne.
mysql> ALTER TABLE shippers MODIFY fax VARCHAR(20) AFTER shipper_name;
Notre table shippers actuelle a un problème principal. Même si vous insérez des enregistrements avec des numéros de téléphone répétés, cela ne vous empêche pas de le faire, ce qui n'est pas bon. Les numéros de téléphone devraient être uniques.
Vous pouvez ajouterphoneAjouter une contrainte UNIQUE à la colonne pour résoudre ce problème. Vous pouvez ajouter la contrainte à une colonne existante dans une table existante en utilisant la syntaxe suivante :
ALTER TABLE table_name ADD UNIQUE (column_name,...);
La phrase UNIQUE suivant versphoneAjouter une contrainte à la colonne.
mysql> ALTER TABLE shippers ADD UNIQUE (phone);
Après l'exécution de cette instruction, si vous essayez d'insérer un numéro de téléphone répété, vous recevrez un message d'erreur.
De même, si vous créez une table sans PRIMARY KEY, vous pouvez utiliser ce qui suit :
ALTER TABLE table_name ADD PRIMARY KEY (column_name,...);
Si elle n'est pas définie, la clause suivantePRIMARY KEY Ajouter la contrainteshipper_idColonne.
mysql> ALTER TABLE shippers ADD PRIMARY KEY (shipper_id);
La syntaxe de base pour supprimer une colonne de la table existante :
ALTER TABLE table_name DROP COLUMN column_name;
La clause suivante supprimeshippersSupprimer la colonne que nous avons ajoutée à la tablefaxColonne.
mysql> ALTER TABLE shippers DROP COLUMN fax;
Maintenant, après avoir exécuté l'instruction ci-dessus, si vous voyez la structure de la table, elle ressemble à ceci :
+--------------+-------------+------+-----+---------+----------------+ | Champ | Type | Null | Clé | Défaut | Extra | +--------------+-------------+------+-----+---------+----------------+ | shipper_id | int | NON | PRI | NULL | auto_increment | | shipper_name |60) | NON | | NULL | | phone |20) | NON | UNI | NULL | +--------------+-------------+------+-----+---------+----------------+
Vous pouvez utiliser les clauses ALTER suivantes pour modifier le type de données d'une colonne dans SQL Server :
ALTER TABLE table_name ALTER COLUMN column_name new_data_type;
Mais le serveur de base de données MySQL ne supporte pas la syntaxe ALTER COLUMN. Il supporte des clauses d'alternative pour modifier les colonnes, telles que:
ALTER TABLE table_name MODIFY column_name new_data_type;
La clause suivante modifieshippersdans la tablephoneen changeant le type de données actuel de la colonne de VARCHAR en CHAR, de longueur2015。
mysql> ALTER TABLE shippers MODIFY phone CHAR(15);
De la même manière, vous pouvez utiliser la clause MODIFY pour basculer entre la permission de NULL dans les colonnes d'une table MySQL, en réaffectant la définition actuelle de la colonne et en ajoutant la contrainte null ou not null à la fin, comme suit:
mysql> ALTER TABLE shippers MODIFY shipper_name CHAR(15) NOT NULL;
Voici la syntaxe de base pour renommer une table existante dans MySQL :
ALTER TABLE current_table_name RENAME new_column_name;
Les instructions suivantes renommeront notreshippersRenommer la tableshipper。
mysql> ALTER TABLE shippers RENAME shipper;
Vous pouvez également utiliser les instructions RENAME TABLE suivantes pour réaliser le même objectif dans MySQL :
mysql> RENAME TABLE shippers TO shipper;