MySQL表结构修改,实际就是按修改后的结构和属性创建新表再将原表记录写入。
如果表记录太多,可能会导致执行时间较长。
当然有些情况也可以避免重建表并写入记录。
1.修改缺省值
假设有一张表,字段需要修改默认值,那么可以使用alter colnum
alter table 表名 alter column 字段名 set default 1;
2.修改字段注释、枚举字段末端增加新值等
可以按如下步骤:
创建一张有相同结构的空表,并进行需要的修改
执行flush tables with read lock,这将会关闭所有正在使用的表,并禁止任何表被打开。
交换.frm文件
执行unlock tables来释放第二步的读锁
确认无误后,删除新建表
例:
#create table 新表名 like 原表名;
#flush table with read lock;
#unlock tables;
mv 原表名.frm 原表名tmp.frm
mv 新表名.frm 原表名.frm
mv 原表名tmp.frm 新表名
注意:以上操作有一定风险。
以下的操作可能不需要重建表:
1.移除一个列的自增长属性
2.增加、删除或者修改enum和set常量