Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/81.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 sqlite触发器是在整个数据库上工作还是只在更改的行上工作_Mysql_Sql_Sqlite_Triggers - Fatal编程技术网

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

我需要将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触发器是否也是如此?如果我删除了
,其中rowid=new.rowid
,sqlite会在整个表上触发更新吗?

目前,SQLite只支持每行触发器,不支持每语句触发器。因此,为每行显式指定是可选的。FOR EACH ROW表示触发器中指定的SQL语句可能会被触发的语句插入、更新或删除的每个数据库行执行(取决于WHEN子句)

但是,这仅适用于触发器本身。
触发器中的任何SQL语句都是独立的(如果要访问其他表/行,则必须是独立的)。因此,在没有WHERE子句的情况下执行UPDATE将更新表中的所有行,与触发器外的行一样。

因此,如果我删除
WHERE rowid=new.rowid
触发器将不再具有相同的效果?如果我想在mysql中实现这种效果,我会怎么做?如果你真的想,你可以执行相同的UDPATE。根据讨论,在mysql中不起作用,事实上,当我尝试它时,我得到了一个错误。但看起来他们已经尽可能地解决了。谢谢你的帮助。