描述
我有一个更新之前的触发器来填充updated_at
字段以记录更新时间。我使用了for each row
语句,并期望每一行都有不同的时间戳。但是如果我在一个语句中更新多行,则所有行都会获得相同的时间戳。
例 对于下表和触发器:
CREATE TABLE `foo` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`bar` varchar(255) NOT NULL,
`updated_at` bigint(20) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
delimiter $$
create trigger foo_before_update before update on `foo`
for each row begin
set new.updated_at = UNIX_TIMESTAMP(now(6)) * 1000000;
end $$
delimiter ;
和现有数据:
+----+-----+------------+
| id | bar | updated_at |
+----+-----+------------+
| 1 | a | 0 |
| 2 | b | 0 |
| 3 | c | 0 |
+----+-----+------------+
当我运行UPDATE foo SET bar = 'd';
时,我希望有三个不同的时间戳,但我得到了:
+----+-----+------------------+
| id | bar | updated_at |
+----+-----+------------------+
| 1 | d | 1536903279930403 |
| 2 | d | 1536903279930403 |
| 3 | d | 1536903279930403 |
+----+-----+------------------+
我的问题 我正在使用mysql 5.7和documentation:
FOR EACH ROW后面的语句定义了触发器体;也就是说,每次触发器激活时执行的语句,对于受触发事件影响的每一行都会发生一次。
我想知道导致时间戳相同的原因: