Mysql sqlite触发器是在整个数据库上工作还是只在更改的行上工作
我需要将sqlite触发器转换为mysql触发器。我已经转换了以下sqlite触发器Mysql sqlite触发器是在整个数据库上工作还是只在更改的行上工作,mysql,sql,sqlite,triggers,Mysql,Sql,Sqlite,Triggers,我需要将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
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触发器是否也是如此?如果我删除了,其中rowid=new.rowid
,sqlite会在整个表上触发更新吗?
目前,SQLite只支持每行触发器,不支持每语句触发器。因此,为每行显式指定是可选的。FOR EACH ROW表示触发器中指定的SQL语句可能会被触发的语句插入、更新或删除的每个数据库行执行(取决于WHEN子句)
但是,这仅适用于触发器本身。
触发器中的任何SQL语句都是独立的(如果要访问其他表/行,则必须是独立的)。因此,在没有WHERE子句的情况下执行UPDATE将更新表中的所有行,与触发器外的行一样。因此,如果我删除
WHERE rowid=new.rowid
触发器将不再具有相同的效果?如果我想在mysql中实现这种效果,我会怎么做?如果你真的想,你可以执行相同的UDPATE。根据讨论,在mysql中不起作用,事实上,当我尝试它时,我得到了一个错误。但看起来他们已经尽可能地解决了。谢谢你的帮助。