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; vérifiez le manuel qui correspond à votre version de serveur MySQL pour la bonne syntaxe à utiliser près de 'VARCHAR (255) NOT NULL SET DEFAULT' {} '' à la ligne 1
Réponses:
ALTER TABLE foobar_data MODIFY COLUMN col VARCHAR(255) NOT NULL DEFAULT '{}';
Une deuxième possibilité qui fait de même (grâce à juergen_d):
ALTER TABLE foobar_data CHANGE COLUMN col col VARCHAR(255) NOT NULL DEFAULT '{}';
la source
column
est facultatif. Vous pouvez simplement utiliserALTER TABLE foobar_data MODIFY col VARCHAR(255) NOT NULL DEFAULT '{}';
ouALTER TABLE foobar_data CHANGE col col VARCHAR(255) NOT NULL DEFAULT '{}';
et le résultat sera le même.{}
.col
s l'un à côté de l'autre est-il correct? (comme çacol col
)DEFAULT
valeur. Cela traitera toutes les lignes de la table pour rien (très long sur de grandes tables). Utilisez à la placeALTER TABLE <table_name> ALTER COLUMN <column_name> SET DEFAULT <value>
ce qui est instantané.En guise de suivi, si vous souhaitez simplement définir une valeur par défaut, vous pouvez certainement utiliser la syntaxe ALTER .. SET. Ne mettez pas toutes les autres choses là-dedans. Si vous voulez mettre le reste de la définition de colonne, 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 venu ici):
ALTER TABLE table_name ALTER COLUMN column_name SET DEFAULT 'literal';
Pour lequel «littéral» pourrait aussi être un nombre (par exemple
...SET DEFAULT 0
). Je ne l'ai pas essayé avec...SET DEFAULT CURRENT_TIMESTAMP
mais pourquoi pas hein?la source
ALTER TABLE table_name MODIFY COLUMN column_name TIMESTAMP NOT NULL DEFAULT current_timestamp;
DEFAULT
valeur.NOW()
oucurrent_timestamp()
@Malaise @NereisSi vous souhaitez ajouter une valeur par défaut pour la colonne déjà créée, cela fonctionne pour moi:
ALTER TABLE Persons ALTER credit SET DEFAULT 0.0;
la source
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;
Veuillez noter la déclaration de nom de colonne double
Suppression de DEFAULT CURRENT_TIMESTAMP:
ALTER TABLE tablename ALTER COLUMN columnname1 DROP DEFAULT, ALTER COLUMN columnname2 DROPT DEFAULT;
la source
La réponse acceptée fonctionne bien.
En cas d' utilisation incorrecte de l' erreur de valeur NULL , sur les valeurs NULL , mettez à jour toutes les valeurs NULL à la valeur par défaut dans cette colonne, puis essayez d'effectuer la modification.
UPDATE foobar_data SET col = '{}' WHERE col IS NULL; ALTER TABLE foobar_data MODIFY COLUMN col VARCHAR(255) NOT NULL DEFAULT '{}';
la source
Dans le cas où ce qui précède ne fonctionne pas pour vous (par exemple: vous travaillez avec un nouveau SQL ou Azure ), essayez ce qui suit:
1) supprimer la contrainte de colonne existante (le cas échéant):
ALTER TABLE [table_name] DROP CONSTRAINT DF_my_constraint
2) créez-en un nouveau:
ALTER TABLE [table_name] ADD CONSTRAINT DF_my_constraint DEFAULT getdate() FOR column_name;
la source
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 '';
la source