Ich stieß auf ein Problem, als ich versuchte, zwei TIMESTAMP-Spalten in meiner Datenbank zu erstellen. Einer rief created
und einer rief updated
. Ich dachte, es wäre einfach, den Standardwert von beiden auf CURRENT_TIMESTAMP
und dann ON UPDATE CURRENT_TIMESTAMP
für die Spalte updated
zu setzen. Aber aus irgendeinem Grund bedeutet MySQL, dass das eine schlechte Idee ist ... also habe ich nach Wegen gesucht, dies zu tun, ohne eines von ihnen in der Einfüge-Abfrage zu setzen.MySQL: Wie Trigger für Einstellungsdatum für neue Zeilen erstellen
Ich habe einen Weg gefunden, indem Sie einen Trigger in this answer verwenden, aber ich bekomme immer Fehler. Ich habe gerade geschafft, den Trigger zu erstellen, aber jetzt bekomme ich Fehler, wenn ich versuche, neue Zeilen einzufügen, die behaupten, dass
1442 - Tabelle 'Aufgaben' in gespeicherten Funktion/Trigger nicht aktualisieren kann, weil es bereits von verwendet wird Anweisung, die diese gespeicherte Funktion/Trigger aufgerufen hat.
Und ich verstehe nicht, was das überhaupt bedeutet. Also, ich hatte gehofft, dass jemand hier dieses Thema beleuchten könnte.
Die SQL ich verwendet, um die Tabelle zu erstellen, und der Auslöser ist wie folgt: hier falsch
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;
Was mache ich?