Je ne parviens pas à définir Current_timestamp
comme valeur par défaut. Ma Mysql
version est 5.5.47
.
La requête est
ALTER TABLE `downloads` ADD `date` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ;
Pendant qu'il fonctionne bien sur ma base de données locale avec mysql V5.6.56
.
Depuis le manuel MySQL 5.5 :
Vous ne pouvez pas définir la valeur par défaut pour une colonne de date comme étant la valeur d'une fonction telle que NOW () ou CURRENT_DATE. L'exception est que vous pouvez spécifier CURRENT_TIMESTAMP comme valeur par défaut pour une colonne TIMESTAMP.
Par conséquent, ce que vous voulez réaliser fonctionnera dans MySQL 5.5 si vous ajoutez une colonne TIMESTAMP
au lieu d'une colonne DATE
.
Les changements dans 5.6.x qui permettent la fonctionnalité sont documentés ici , et je citerai le résumé pertinent pour être complet:
Depuis MySQL 5.6.5, les colonnes TIMESTAMP et DATETIME peuvent être automatiquement initialisées et mises à jour à la date et à l'heure actuelles (c'est-à-dire l'horodatage actuel). Avant la version 5.6.5, cela n'est vrai que pour TIMESTAMP et pour au plus une colonne TIMESTAMP par table.
Vérifiez cette réponse .
Vos options sont:
Changez le type de colonne en TIMESTAMP, comme dans:
ALTER TABLE `downloads` ADD `date` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ;
Créez un TRIGGER QUI met à jour la colonne automatiquement:
ALTER TABLE `downloads` ADD `date` DATETIME NULL; -- date must allow
-- NULLs or default
-- to a special value
DROP TRIGGER IF EXISTS downloads_BI;
DELIMITER //
CREATE TRIGGER downloads_BI
BEFORE INSERT ON downloads FOR EACH ROW
BEGIN
IF (NEW.date IS NULL) THEN -- change the isnull check for the default used
SET NEW.date = now();
END IF;
END//
DELIMITER ;
Vous pouvez également créer une valeur de mise à jour si elle doit être mise à jour automatiquement lors de la mise à jour ou si vous souhaitez empêcher les valeurs nulles.
mysql> INSERT INTO downloads (i) VALUES (1); -- I do not set date
Query OK, 1 row affected (0.00 sec)
mysql> SELECT * FROM downloads;
+------+---------------------+
| i | date |
+------+---------------------+
| 1 | 2016-03-22 09:27:52 |
+------+---------------------+
1 row in set (0.00 sec)