Solución:
Del manual de MySQL 5.5:
No puede establecer el valor predeterminado de una columna de fecha para que sea el valor de una función como NOW () o CURRENT_DATE. La excepción es que puede especificar CURRENT_TIMESTAMP como predeterminado para una columna TIMESTAMP.
Por lo tanto, lo que desea lograr funcionará en MySQL 5.5 si agrega un TIMESTAMP
columna en lugar de una DATE
columna.
Los cambios en 5.6.x que permiten la funcionalidad están documentados aquí, y citaré el resumen relevante para que esté completo:
A partir de MySQL 5.6.5, las columnas TIMESTAMP y DATETIME se pueden inicializar y actualizar automáticamente a la fecha y hora actuales (es decir, la marca de tiempo actual). Antes de 5.6.5, esto es cierto solo para TIMESTAMP, y como máximo para una columna TIMESTAMP por tabla.
Comprueba esta respuesta.
Tus opciones son:
- Actualice a MySQL 5.6.5
-
Cambie el tipo de columna a TIMESTAMP, como en:
ALTER TABLE `downloads` ADD `date` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ;
-
Cree un DISPARADOR QUE actualice la columna automáticamente:
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 ;
Es posible que también desee crear un valor de actualización, si debe actualizarse automáticamente en la actualización o si desea evitar valores nulos.
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)