256 votes

Comment modifier une colonne et changer la valeur par défaut ?

J'ai obtenu l'erreur suivante en essayant de modifier le type de données d'une colonne et en définissant une nouvelle valeur par défaut :

ALTER TABLE foobar_data ALTER COLUMN col VARCHAR(255) NOT NULL SET DEFAULT '{}';

ERREUR 1064 (42000) : Vous avez une erreur dans votre syntaxe SQL ; vérifiez dans le manuel correspondant à la version de votre serveur MySQL pour connaître la bonne syntaxe à utiliser près de 'VARCHAR(255) NOT NULL SET DEFAULT '{}'' à la ligne 1

345voto

fancyPants Points 17708
ALTER TABLE foobar_data MODIFY COLUMN col VARCHAR(255) NOT NULL DEFAULT '{}';

Une deuxième possibilité qui fait la même chose (merci à juergen_d) :

ALTER TABLE foobar_data CHANGE COLUMN col col VARCHAR(255) NOT NULL DEFAULT '{}';

162voto

DaveJenni Points 31

Par ailleurs, si vous souhaitez simplement définir une valeur par défaut, vous pouvez certainement utiliser la syntaxe ALTER .. SET. Il suffit de ne pas mettre tous les autres éléments à l'intérieur. Si vous voulez mettre le reste de la définition de la colonne, utilisez la syntaxe MODIFY ou CHANGE comme indiqué dans la réponse acceptée.

Quoi qu'il en soit, la syntaxe ALTER pour définir une colonne par défaut, (puisque c'est ce que je cherchais quand je suis venu ici) :

ALTER TABLE table_name ALTER COLUMN column_name SET DEFAULT 'literal';

Pour lequel "littéral" peut également être un nombre (par exemple ...SET DEFAULT 0 ). Je n'ai pas essayé avec ...SET DEFAULT CURRENT_TIMESTAMP mais pourquoi pas, hein ?

39voto

Akash Dole Points 321

Si vous souhaitez ajouter une valeur par défaut à la colonne déjà créée, cela fonctionne pour moi :

ALTER TABLE Persons
ALTER credit SET DEFAULT 0.0;

4voto

Leonard Lepadatu Points 490

Pour DEFAULT CURRENT_TIMESTAMP :

ALTER TABLE tablename
 CHANGE COLUMN columnname1 columname1 DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
 CHANGE COLUMN columnname2 columname2 DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP;

A noter double déclaration du nom de la colonne

Suppression de DEFAULT CURRENT_TIMESTAMP :

ALTER TABLE tablename
 ALTER COLUMN columnname1 DROP DEFAULT,
 ALTER COLUMN columnname2 DROPT DEFAULT;

2voto

Milan Points 746

Au cas où ce qui précède ne fonctionnerait pas pour vous (c'est-à-dire : vous travaillez avec nouveau SQL ou Azure ), essayez ce qui suit :

1) supprimer la contrainte de colonne existante (s'il y en a une) :

ALTER TABLE [table_name] DROP CONSTRAINT DF_my_constraint

2) en créer un nouveau :

ALTER TABLE [table_name] ADD CONSTRAINT DF_my_constraint  DEFAULT getdate() FOR column_name;

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X