MySQL:如何创建设置新行创建日期的触发器
当我试图在数据库中创建两个时间戳列时,遇到了一个问题。一个是创建的MySQL:如何创建设置新行创建日期的触发器,mysql,sql,triggers,timestamp,mysql-error-1442,Mysql,Sql,Triggers,Timestamp,Mysql Error 1442,当我试图在数据库中创建两个时间戳列时,遇到了一个问题。一个是创建的,一个是更新的。我想很容易将这两个的默认值都设置为CURRENT\u TIMESTAMP,然后在updated列的更新CURRENT\u TIMESTAMP时设置为。但出于某种原因MySQL意味着这是个坏主意。。。因此,我一直在寻找这样做的方法,而不必在insert查询中设置其中一个 我在中使用触发器找到了一种方法,但我不断地出错。我刚刚成功地创建了触发器,但是现在当我尝试插入新行声明该触发器时,会出现错误 1442-无法更新存储
,一个是更新的。我想很容易将这两个的默认值都设置为CURRENT\u TIMESTAMP
,然后在updated
列的更新CURRENT\u TIMESTAMP
时设置为。但出于某种原因MySQL意味着这是个坏主意。。。因此,我一直在寻找这样做的方法,而不必在insert查询中设置其中一个
我在中使用触发器找到了一种方法,但我不断地出错。我刚刚成功地创建了触发器,但是现在当我尝试插入新行声明该触发器时,会出现错误
1442-无法更新存储函数/触发器中的表“tasks”,因为调用此存储函数/触发器的语句已使用该表
我根本不明白那意味着什么。所以,我希望这里有人能对这个问题有所启发
我用于创建表和触发器的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;
我做错了什么?您的触发器需要是“插入前”,并且您需要使用设置
而不是更新
:
CREATE TRIGGER task_creation_timestamp BEFORE INSERT ON tasks
FOR EACH ROW
SET NEW.created = NOW();