web-dev-qa-db-fra.com

Ajouter plusieurs colonnes APRES une colonne spécifique dans MySQL

J'ai besoin d'ajouter plusieurs colonnes à une table mais de positionner les colonnes after une colonne appelée lastname.

J'ai essayé ceci:

ALTER TABLE `users` ADD COLUMN
(
    `count` smallint(6) NOT NULL,
    `log` varchar(12) NOT NULL,
    `status` int(10) unsigned NOT NULL
) 
AFTER `lastname`;

Je reçois cette erreur:

Vous avez une erreur dans votre syntaxe SQL; Consultez le manuel correspondant à la version de votre serveur MySQL pour connaître la syntaxe à utiliser près de ') AFTER lastname' à ​​la ligne 7.


Comment puis-je utiliser APRÈS dans une requête comme celle-ci?

321
Koala

Essaye ça

ALTER TABLE users
ADD COLUMN `count` SMALLINT(6) NOT NULL AFTER `lastname`,
ADD COLUMN `log` VARCHAR(12) NOT NULL AFTER `count`,
ADD COLUMN `status` INT(10) UNSIGNED NOT NULL AFTER `log`;

vérifier le syntaxe

652
Ayyappan Sekar

Si vous souhaitez ajouter une seule colonne après un champ spécifique, la requête MySQL suivante devrait alors fonctionner:

ALTER TABLE users
    ADD COLUMN count SMALLINT(6) NOT NULL
    AFTER lastname

Si vous souhaitez ajouter plusieurs colonnes, vous devez utiliser la commande "AJOUTER" à chaque fois pour une colonne. Voici la requête MySQL pour cela:

ALTER TABLE users
    ADD COLUMN count SMALLINT(6) NOT NULL,
    ADD COLUMN log VARCHAR(12) NOT NULL,
    ADD COLUMN status INT(10) UNSIGNED NOT NULL
    AFTER lastname

Point à noter

Dans la deuxième méthode, le dernier ADD COLUMNcolonne devrait en fait être la première colonne que vous souhaitez ajouter à la table.

E.g: si vous voulez ajouter count, log, status dans l'ordre exact après lastname, la syntaxe serait alors la suivante:

ALTER TABLE users
    ADD COLUMN log VARCHAR(12) NOT NULL AFTER lastname,
    ADD COLUMN status INT(10) UNSIGNED NOT NULL AFTER lastname,
    ADD COLUMN count SMALLINT(6) NOT NULL AFTER lastname
72
user3106476

Vous ne pouvez pas mentionner plusieurs noms de colonne avec des virgules à l'aide de ADD COLUMN. Vous devez mentionner ADD COLUMN chaque fois que vous définissez une nouvelle colonne.

10
Piyush Saxena

Celui-ci est correct:

ALTER TABLE `users`
    ADD COLUMN `count` SMALLINT(6) NOT NULL AFTER `lastname`,
    ADD COLUMN `log` VARCHAR(12) NOT NULL AFTER `count`,
    ADD COLUMN `status` INT(10) UNSIGNED NOT NULL AFTER `log`;
9
Denys Popov
ALTER TABLE `users` ADD COLUMN
`COLUMN NAME` DATATYPE(SIZE) AFTER `EXISTING COLUMN NAME`;

Vous pouvez le faire avec ça, en travaillant bien pour moi.

2
Gaurav Singh

Une possibilité serait de ne pas se soucier de réorganiser les colonnes de la table et de simplement la modifier en ajoutant les colonnes. Créez ensuite une vue comportant les colonnes dans l’ordre que vous souhaitez, en supposant que l’ordre est vraiment important. La vue peut être facilement modifiée pour refléter l'ordre que vous souhaitez. Étant donné que je ne peux pas imaginer que l'ordre serait important pour les applications de programmation, la vue devrait suffire pour les requêtes manuelles où cela pourrait être important.

1
Ahmed

La solution qui a fonctionné pour moi avec la valeur par défaut 0 est la suivante

ALTER TABLE reservations ADD COLUMN isGuest BIT DEFAULT 0
0
Jorge Santos Neill

Cela fonctionne bien pour moi:

ALTER TABLE 'users'
ADD COLUMN 'count' SMALLINT(6) NOT NULL AFTER 'lastname',
ADD COLUMN 'log' VARCHAR(12) NOT NULL AFTER 'count',
ADD COLUMN 'status' INT(10) UNSIGNED NOT NULL AFTER 'log';
0
Aiswarya T S