Puede que se de el caso de que halles algún error con tu código o proyecto, recuerda probar siempre en un ambiente de testing antes subir el código al trabajo final.
Solución:
Del manual de MySQL 5.5:
No puede establecer que el valor predeterminado de una columna de fecha 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 quiere 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 se documentan aquí, y citaré el resumen relevante para completarlo:
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 true solo para TIMESTAMP, y como máximo una columna TIMESTAMP por tabla.
Revisa esta respuesta.
Tus opciones son:
- Actualizar 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 desea evitar null valores.
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)
Acuérdate de que tienes concesión de interpretar si te fue útil.