mysql执行大部分修改表结构的操作方法是用新的结构创建一个空表,从旧表中查出所有数据插入新表,然后刷除旧表。这样操作可能需要花费很长时间。
alter table允许用 alter column、modify column、change column语句修改列
常用场景
方法一:
在一台不提供服务的机器上执行alter table操作,然后主从切换。
方法二:
影子拷贝,用要求的表结构创建一张和源表无关的新表,然后通过重命名和删除表操作交换两张表
例子:改变一个表的默认值
1:alter table film
-> modify column rental_duration tinyint(3) not null default 5;
Query OK, 1000 rows affected (0.19 sec)
Records: 1000 Duplicates: 0 Warnings: 0
2:alter table film
-> alter column rental_duration set default 5;
Query OK, 0 rows affected (0.14 sec)
Records: 0 Duplicates: 0 Warnings: 0
第二种方法直接修改.frm文件,操作更快!(mysql列的默认值实际存在在表的.frm文件中)
基本技术:
1.创建一张相同表结构的空表,并进行所需要的修改(例如增加ENUM常量)
2.执行FLUSH TABLES WITH READ LOCK。这个会关闭所有正在使用的表,并且禁止任何表被打开
3.交换.frm文件
4.执行UNLOCK TABLES释放读锁
5.删除交换后的文件
阅读(1562) | 评论(0) | 转发(0) |