我有一张桌子,叫它myTbl
。
我还有两张桌子-Monitor
和Monitor_bkp
。
现在,我构建了一个触发器,以便在监视器中创建一个新行,只要它是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
的更新。现在我的问题是,我是否使用
RENAME TABLE foo TO foo_old, foo_new To foo;
有没有可能在交换进行时触发,如果有,它会失败?
最佳答案
根据the manual(以及我使用此功能进行日志旋转的经验),操作是原子的,尝试使用表的线程必须等待RENAME TABLE
完成。
这也意味着RENAME TABLE
将等待触摸表的所有事务完成,并且在等待期间,它将锁定尝试触摸表的每个后续事务。
基本上,在互换期间最长的交易期间,一切都将冻结,但将保持一致。
关于mysql - MySql-表名称交换是原子操作吗,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/34154388/