MySQL自动更新时间戳和触发器执行顺序

MySQL自动更新时间戳和触发器执行顺序,mysql,sql,Mysql,Sql,是否有任何文档(在中无法确定)指定是否首先执行时间戳列或触发器上的自动更新 CREATE TABLE IF NOT EXISTS `table1` ( `id` VARCHAR(255) NOT NULL, update_time TIMESTAMP DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP, PRIMARY KEY(`id`) ); CREATE TABLE IF NOT EXISTS `table2` ( `id` V

是否有任何文档(在中无法确定)指定是否首先执行
时间戳
列或触发器上的自动更新

CREATE TABLE IF NOT EXISTS `table1` (
    `id` VARCHAR(255) NOT NULL,
    update_time TIMESTAMP DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP,
    PRIMARY KEY(`id`)
);

CREATE TABLE IF NOT EXISTS `table2` (
    `id` VARCHAR(255) NOT NULL,
    update_time TIMESTAMP DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP,
    PRIMARY KEY(`id`)
);

delimiter $$
DROP TRIGGER if EXISTS `trigger_upd_table1` $$
CREATE TRIGGER `trigger_upd_table1` 
AFTER UPDATE ON `table1`
FOR EACH ROW BEGIN
    INSERT INTO `table2` VALUES (new.`id`, new.`update_time`);
END $$
delimiter ;


INSERT INTO `table1` (`id`) VALUES ('100');


UPDATE `table1` t1
SET t1.id = '101'
WHERE t1.id = '100';
用一个例子进一步说明。当我对
table1
中的单个记录运行更新查询时,是否首先执行
update\u time
列上的自动更新,或者执行
table1
上指定的触发器。目前,我正在v8.0.15中进行测试,看到
update\u time
列上的自动更新首先发生。然后将更新后的记录插入表2中


但是是否有任何文档指定了该行为

触发器定义为更新后的
,因此更新将首先完成(包括
update\u time
的更新)。这是最接近的行为规范:“触发时间是触发动作时间。它可以是BEFORE或AFTER,表示触发器在要修改的每一行之前或之后激活。“触发器被定义为
更新之后的
,因此更新将首先完成(包括
更新时间的更新)。这是最接近的行为规范:触发时间是触发动作时间。它可以是BEFORE或AFTER,指示触发器在要修改的每行之前或之后激活。”