データベースに2つのTIMESTAMP列を作成しようとしたときに、問題が発生しました。1つはと呼ばれcreated
、もう1つはと呼ばれupdated
ます。列の両方のデフォルト値CURRENT_TIMESTAMP
を設定するのは簡単だと思いました。しかし、何らかの理由でMySQLはそれが悪い考えであることを意味します...それで、私は挿入クエリでそれらの1つを設定する必要なしにこれを行う方法を探していました。ON UPDATE CURRENT_TIMESTAMP
updated
この回答でトリガーを使用して1つの方法を見つけましたが、エラーが発生し続けます。実際にトリガーを作成できましたが、新しい行を挿入しようとするとエラーが発生します。
1442-このストアド関数/トリガーを呼び出したステートメントによって既に使用されているため、ストアド関数/トリガーのテーブル'タスク'を更新できません。
そして、それが何を意味するのかまったくわかりません。だから、私はここの誰かがこの主題に光を当てることができることを望んでいました。
テーブルとトリガーの作成に使用したSQLは次のとおりです。
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;
私はここで何が間違っているのですか?