Ho avuto un problema mentre tentavo di creare due colonne TIMESTAMP nel mio database. Uno chiamato created
e uno chiamato updated
. Ho pensato che sarebbe stato facile impostare il valore predefinito di entrambi su CURRENT_TIMESTAMP
e quindi ON UPDATE CURRENT_TIMESTAMP
per la colonna updated
. Ma per qualche ragione MySQL significa che è una cattiva idea ... quindi ho cercato modi per farlo senza doverne impostare uno nella query di inserimento.MySQL: Come creare un trigger per impostare la data di creazione per nuove righe
Ho trovato un modo utilizzando un trigger in this answer, ma continuo a ricevere errori. Sono appena riuscito a creare il trigger, ma ora ricevo errori quando tento di inserire nuove righe sostenendo che
1442 - Impossibile aggiornare la tabella "attività" nella funzione/trigger memorizzato perché è già utilizzata da dichiarazione che ha invocato questa funzione/trigger memorizzato.
E non capisco cosa significhi. Quindi, speravo che qualcuno qui potesse chiarire questo argomento.
L'SQL che ho usato per creare la tabella e il grilletto è la seguente:
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;
Che cosa sto facendo male qui?