Question assez simple ici, je pense que cela devrait marcher mais ça ne marche pas. Pourquoi pas
CREATE TABLE INVOICE(
INVOICEDATE DATE NOT NULL DEFAULT CURRENT_DATE
)
Cela ne fonctionne pas car ce n'est pas supporté
La clause
DEFAULT
spécifie une valeur par défaut pour une colonne. À une exception près, la valeur par défaut doit être une constante; ce ne peut pas être une fonction ou une expression. Cela signifie par exemple que vous ne pouvez pas définir la valeur par défaut pour une colonne de date comme valeur d'une fonction telle queNOW()
ouCURRENT_DATE
. La seule exception est que vous pouvez spécifierCURRENT_TIMESTAMP
comme valeur par défaut pour une colonneTIMESTAMP
déclarez votre colonne de date comme NOT NULL, mais sans valeur par défaut. Ajoutez ensuite ce déclencheur:
USE `ddb`;
DELIMITER $$
CREATE TRIGGER `default_date` BEFORE INSERT ON `dtable` FOR EACH ROW
if ( isnull(new.query_date) ) then
set new.query_date=curdate();
end if;
$$
delimiter ;
create table the_easy_way(
capture_ts DATETIME DEFAULT CURRENT_TIMESTAMP,
capture_dt DATE AS (DATE(capture_ts))
)
(MySQL 5.7)
Comme l’indique correctement l’autre réponse, vous ne pouvez pas utiliser les fonctions dynamiques comme valeur par défaut. Vous pouvez utiliser TIMESTAMP
avec l'attribut CURRENT_TIMESTAMP
, mais ce n'est pas toujours possible, par exemple si vous souhaitez conserver un horodatage creation et updated, et vous aurez besoin de la seule colonne autorisée TIMESTAMP
pour seconde.
Dans ce cas, utilisez plutôt un déclencheur .
Selon cette documentation , à partir de MySQL 8.0.13, vous pourrez spécifier:
CREATE TABLE INVOICE(
INVOICEDATE DATE DEFAULT (CURRENT_DATE)
)
Malheureusement, cette version n’a pas encore été publiée à ce jour. Vous pouvez vérifier ici pour les dernières mises à jour.
----- 2016-07-04 MariaDB 10.2.1 - Notes de publication - -----
Prise en charge de DEFAULT avec les expressions ( MDEV-10134 ).
----- 2018-10-22 8.0.13 Disponibilité générale - - -----
MySQL prend désormais en charge l'utilisation d'expressions en tant que valeurs par défaut dans les spécifications de type de données. Cela inclut l'utilisation d'expressions en tant que valeurs par défaut pour les types de données BLOB , TEXT , GEOMETRY et _SON_JSON , qui ne pouvaient auparavant pas se voir attribuer de valeurs par défaut . Pour plus de détails, voir Type de données Valeurs par défaut .