formato - insertar fecha y hora en mysql desde php
MySQL: Cómo crear el disparador para establecer la fecha de creación para nuevas filas (1)
Me encontré con un problema cuando intenté crear dos columnas TIMESTAMP en mi base de datos. Uno llamado created
y uno llamado updated
. Pensé que sería fácil establecer el valor predeterminado de ambos en CURRENT_TIMESTAMP
y luego en ON UPDATE CURRENT_TIMESTAMP
para la columna updated
. Pero por alguna razón MySQL significa que es una mala idea ... así que he estado buscando formas de hacerlo sin tener que configurar uno de ellos en la consulta de inserción.
Encontré una forma al usar un disparador en esta respuesta , pero sigo recibiendo errores. Me las arreglé para crear el activador, pero ahora recibo errores cuando intento insertar nuevas filas que afirman que
1442 - No se pueden actualizar las ''tareas'' de la tabla en la función / desencadenador almacenado porque ya está siendo utilizado por la instrucción que invocó esta función / activador almacenado.
Y no entiendo lo que eso significa en absoluto. Entonces, esperaba que alguien aquí pudiera arrojar algo de luz sobre este tema.
El SQL que utilicé para crear la tabla y el disparador es el siguiente:
CREATE TABLE `tasks` (
`id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
`created` DATETIME,
`updated` TIMESTAMP ON UPDATE CURRENT_TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
`title` VARCHAR(255) NOT NULL,
`notes` TEXT,
`status_id` INT(10) UNSIGNED NOT NULL,
PRIMARY KEY (`id`),
KEY `status_id` (`status_id`),
CONSTRAINT `fk_tasks_statuses` FOREIGN KEY (`status_id`) REFERENCES `statuses` (`id`),
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
CREATE TRIGGER task_creation_timestamp AFTER INSERT ON tasks
FOR EACH ROW
UPDATE tasks SET created = updated WHERE id = NEW.id;
¿Qué estoy haciendo mal aquí?
Su activador debe ser "antes de la inserción", y debe usar SET
lugar de UPDATE
:
CREATE TRIGGER task_creation_timestamp BEFORE INSERT ON tasks
FOR EACH ROW
SET NEW.created = NOW();