现在做不服务情况下表结构调整方面的摸底。 先从一个最简单的情况入手。 给一个简单的表(没有外键关联)在最后新加一个字段, 这个字段有默认值, 这样从逻辑上不影响此表中已有记录行。 这样, 针对这个问题, 最先想到的原始想法是直接通过alter语句加一个字段。  有些疑问:1, 这样新加字段可能会有什么问题? 从业务逻辑上讲,可以行的通, 但在具体影响上可能会有哪些呢?
2, 看了Facebook的开源实现OSC,它是先新建一个表,跟要改的表一模一样, 再在新表上新加字段, 再把原表里的数据导到新表中。 看似有些绕, 但应该是有它的道理的。 请问, 我那种粗糙的想法, 跟Facebook OSC的想法的差距有哪些?

解决方案 »

  1.   

    会锁表。
    避免锁表。
    并且,直接ALTER TABLE,MYSQL本身的操作,就是锁表,然后创建一个新表,把数据复制到新表,删除原表,更改新表名为原表名。释放表锁
      

  2.   

    在ALTER 表时,要独占打开表,造成锁表,一般是建立临时表(新结构)再导入旧表数据
      

  3.   

    ALTER表新加字段时, 是不是表锁的时间要远长于Alter表改名时表锁的时间? 最好从原理上解释下。