我有一张桌子,叫它myTbl
。我也有两个表-Monitor
和Monitor_bkp
。现在,无论何时更新以下内容,我都建立了一个触发器以在Monitor中创建新行myTbl
:
CREATE TRIGGER mon_task_after_update_task
AFTER UPDATE ON myTbl
FOR EACH ROW INSERT INTO Monitor VALUES(new.id, SYSDATE())
ON DUPLICATE KEY UPDATE last_modified=SYSDATE();
一切正常,而且我随时都有很多更新myTbl
。现在我的问题是,如果我和你交换的名称Monitor
和Monitor_bkp
使用
RENAME TABLE foo TO foo_old, foo_new To foo;
交换进行时是否有可能触发触发器,如果触发,触发器是否会失败?
根据手册(以及我使用此功能进行日志轮换的经验),该操作是原子性的,正在尝试使用该表的线程必须等待RENAME TABLE
完成。
这也意味着RENAME TABLE
它将等待所有触摸表的事务完成,而在等待时它将锁定所有尝试触摸表的后续事务。
基本上,所有内容都会在交换期间最长的事务持续时间内冻结,但是会保持一致。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句