De l'MySQL doc pages (mon gras):
La clause de valeur DEFAULT
dans une spécification de type de données indique une valeur par défaut pour une colonne. Avec une exception, la valeur par défaut doit être une constante; il ne peut pas s'agir d'une fonction ou d'une expression. Cela signifie, par exemple, que vous ne pouvez pas définir la valeur par défaut d'une colonne de date comme étant NOW()
ou CURRENT_DATE
. L'exception est que vous pouvez spécifier CURRENT_TIMESTAMP
comme valeur par défaut pour une colonne TIMESTAMP
.
Je suppose que vous devrez spécifier la valeur réelle lorsque vous insérez la ligne.
Si vous ne voulez pas faire cela, vous pouvez permettre NULLs puis balayer périodiquement la base de données avec un autre processus faisant:
update table mytable set model_year = year(current_date) where model_year is null
mais c'est une bidouille, et plutôt dangereux pour boot, car il y aura une période de temps où les valeurs NULL existent dans la colonne.
C'est quelque chose que toutes vos requêtes devraient prendre en compte, ce qui conduit à la laideur comme:
select a, b, model_year from mytable where model_year is not null
union all
select a, b, year(current_date) from mytable where model_year is null
Je vais moi-même la route par défaut.
pensez-vous avoir des années négatives comme l'année -1989? donc cela devrait être smallint non signé non nul - pensez-y. et supprimez le spécificateur de largeur d'affichage optionnel (4) car vous n'utilisez pas zerofill !! –