Chinaunix首页 | 论坛 | 博客
  • 博客访问: 657872
  • 博文数量: 87
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 2022
  • 用 户 组: 普通用户
  • 注册时间: 2014-04-23 11:16
个人简介

西邮大三狗!!!

文章分类

全部博文(87)

文章存档

2015年(47)

2014年(40)

分类: Mysql/postgreSQL

2015-06-08 13:16:14

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.删除交换后的文件
阅读(1500) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~