我需要将sqlite触发器转换为mysql触发器。我已经转换了以下sqlite触发器
create trigger arpinsert after insert on arp
begin
update arp set timeout = datetime('now', '60 seconds') where rowid = new.rowid and new.mac != '00:00:00:00:00:00';
update arp set timeout = datetime('now') where rowid = new.rowid and new.mac = '00:00:00:00:00:00';
end;
进入以下mysql触发器
delimiter //
create
trigger arpBeforeInsert
before insert
on arp for each row
begin
if new.mac != '00:00:00:00:00:00' then
set new.timeout = date_add(now(), interval 60 second);
else
set new.timeout = now();
end if;
end;//
delimiter ;
我知道mysql触发器只触发受影响的行。 sqlite触发器是一样的吗?如果我删除了where rowid = new.rowid
sqlite触发器会更新整个表吗?
答案 0 :(得分:2)
此时SQLite仅支持FOR EACH ROW触发器,而不支持FOR EACH STATEMENT触发器。因此,明确指定FOR EACH ROW是可选的。 FOR EACH ROW意味着可以为触发器触发的语句插入,更新或删除的每个数据库行执行触发器中指定的SQL语句(取决于WHEN子句)。
但是,这仅适用于触发器本身。 触发器内的任何SQL语句都是独立的(如果要访问其他表/行,则必须如此)。因此,执行不带WHERE子句的UPDATE将更新表的所有行,就像触发器外部一样。