我有一张桌子,叫它myTbl
我还有两张桌子-MonitorMonitor_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/

10-10 06:34