一、基本用法
1. 增加列
alter table tbl_name add col_name type |
例如, 给pet的表增加一列 weight,
mysql>alter table pet add weight int; |
2. 删除列
alter table tbl_name drop col_name |
例如, 删除pet表中的weight这一列
mysql>alter table pet drop weight; |
3. 改变列
分为改变列的属性和改变列的名字
改变列的属性——方法1:
alter table tbl_name modify col_name type |
例如,改变weight的类型
mysql>alter table pet modify weight varchar(30); |
改变列的属性——方法2:
alter table tbl_name change old_col_name col_name type |
例如,改变weight的类型
alter table pet change weight weight varchar(30); |
改变列的名字:
alter table tbl_name change old_col_name col_name |
例如改变pet表中weight的名字:
mysql>alter table pet change weight wei; |
4. 改变表的名字
alter table tbl_name rename new_tbl |
例如, 把pet表更名为animal
mysql>alter table pet rename animal; |
二、对ALTER TABLE的优化
在系统的日常维护中,经常需要对表结构进行更新,例如添加/删除一个字段,改变一个VARCHAR的字段长度等等。MySQL针对这种修改表结构的处理方式是先创建一张新的结构的表,接着会通过执行Insert语句将旧表的内容插入到新表中,最后删除整张旧表。这种处理方式在数据量比较小的时候,不会有什么问题,可是当数据量很大的时候可能需要很多时间来处理该过程。
执行一个更新表结构的操作花费了几个小时的时间,这是无法忍受的。如果你用的是5.1之前的版本的话,还会在执行表结构更新是数据库往往是停止服务的,幸好在最新的版本中这个问题得到了改善
如果在进行表结构更新的时候你采用了恰当的方法,也并不是所有的更新操作会占用你很久的时间。
例如 你想更新用户表的默认密码为“666666”,通常采用的做法是
mysql> ALTER TABLE user -> MODIFY COLUMN pwd VARCHAR NOT NULL DEFAULT ‘666666'; |
通过SHOW STATUS你可以发现在执行这个操作的过程中进行了大量的Insert操作,当用户的数量很大时 例如百万,千万条的数据时,必然会消耗很多的时间。
可是如果你采用下边的方式来更新的话,时间会大大的缩短