web-dev-qa-db-fra.com

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

J'ai eu 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; Consultez le manuel correspondant à la version de votre serveur MySQL pour connaître la syntaxe à utiliser près de 'VARCHAR (255) NOT NULL SET DEFAULT' {} '' à la ligne 1.

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

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

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

En guise de suivi, si vous souhaitez simplement définir une valeur par défaut, vous pouvez utiliser la syntaxe ALTER .. SET. Il suffit de ne pas mettre toutes les autres choses là-dedans. Si vous allez mettre le reste de la définition de colonne dans, utilisez la syntaxe MODIFY ou CHANGE selon 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 arrivé ici):

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

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

100
DaveJenni

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

ALTER TABLE Persons
ALTER credit SET DEFAULT 0.0';
12
Akash Dole

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;

S'il vous plaît noter double columnname declaration

Suppression de DEFAULT CURRENT_TIMESTAMP:

ALTER TABLE tablename
 ALTER COLUMN columnname1 DROP DEFAULT,
 ALTER COLUMN columnname2 DROPT DEFAULT;
4
Leonard Lepadatu

Si ce qui précède ne fonctionne pas pour vous (c'est-à-dire que vous travaillez avec nouveau SQL ou Azure), essayez les solutions suivantes:

1) supprimer la contrainte de colonne existante (le cas échéant):

ALTER TABLE [table_name] DROP CONSTRAINT DF_my_constraint

2) créer un nouveau:

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

Réponse acceptée fonctionne bien.

Dans le cas où tilisation non valide de la valeur NULL erreur, sur NULL valeurs, met à jour toutes les valeurs Null avec la valeur par défaut dans cette colonne, puis essayez faire le changement.

UPDATE foobar_data SET col = '{}' WHERE col IS NULL;

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

Essaye ça

ALTER TABLE `table_name` CHANGE `column_name` `column_name` data_type  NULL DEFAULT '';

comme ça

ALTER TABLE `drivers_meta` CHANGE `driving_license` `driving_license` VARCHAR(30) NULL DEFAULT '';
0
Sohail Ahmad