IT博客汇
  • 首页
  • 精华
  • 技术
  • 设计
  • 资讯
  • 扯淡
  • 权利声明
  • 登录 注册

    MySQL如何将两个表名对调

    OurMySQL发表于 2016-03-20 22:16:02
    love 0

    问题:

    有位同学问我,在类似pt-osc场景下,需要将两个表名对调,怎么才能确保万无一失呢?

    分析:

    估计其他同学就笑了,表名对掉还不简单吗,相互RENAME一下嘛。


    但是,我们想要的是同时完成表名对调,如果是先后的对掉,可能会导致有些数据写入失败,那怎么办?

    其实也不难,从MySQL手册里就能找到方法,那就是:同时锁定2个表,不允许写入,然后对调表名。

    我们通常只锁一个表,那么同时锁两个表应该怎么做呢,可以用下面的方法:

    LOCK TABLES t1 WRITE, t2 WRITE;
    ALTER TABLE t1 RENAME TO t3;
    ALTER TABLE t2 RENAME TO t1;
    ALTER TABLE t3 RENAME TO t2;
    UNLOCK TABLES;

    看到了吧,其实很简单,两个表同时加表级写锁,然后用ALTER语法改名就可以了。

    废话挺多的,谢谢各位客官耐心看完 :)

    抱歉猜想失败,您看看下面的文章有用吗?

    • 2012 年 2 月 16 日 -- MySQL下读取表中字段的说明和备注信息
    • 2013 年 2 月 19 日 -- MySQL下实现闪回的设计思路 (MySQL Flashback Feature)
    • 2009 年 9 月 3 日 -- MySQL InnoDB性能调整的一点实践
    • 2008 年 12 月 12 日 -- MySQL DISTINCT 的基本实现原理
    • 2011 年 7 月 18 日 -- 探索MYSQL源代码-在SHOW PROCESSLIST里添加字段
    • 2008 年 9 月 21 日 -- MySQL如何去除数据表中的重复数据
    • 2014 年 11 月 28 日 -- MySQL源码:索引相关的数据结构(后篇)
    • 2009 年 5 月 26 日 -- MySQL全文检索中不进行全文索引默认过滤词表(ft_stopword_file =>ft_precompiled_stopwords)
    • 2009 年 6 月 23 日 -- 编译x86_64下静态DBD::MySQL模块
    • 2009 年 4 月 8 日 -- 有趣的bloom过滤器


沪ICP备19023445号-2号
友情链接