Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/61.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MySQL:如何创建设置新行创建日期的触发器_Mysql_Sql_Triggers_Timestamp_Mysql Error 1442 - Fatal编程技术网

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();