MySQL笔记(高效的ALTER TABLE)
2010-12-09 23:14
204 查看
在使用alter table进行表修改时,可能会引起很大的消耗,比如会新建一个空表,并进行数据转储,再删除旧表,而当表很大或者有许多索引时,将需要更大的代价,
alter table可以使用ALTER COLUMN、MODIFY COLUMN、CHANGE COLUMN来修改列
ALTER COLUMN:用于指定列的新默认值,或删除旧的默认值。如果旧的默认值被删除同时列值为NULL,则新的默认值为NULL。如果列值不能为NULL,MySQL会指定一个默认值;
MODIFY COLUMN:用于对列名进行重命名,如将a修改为b:ALTER TABLE CHANGE a b INT.如果想改变列的类型而不是名字,也需要指定新,旧列名,可以设定为相同。
CHANGE COLUMN:改变列的类型,无需重新命名
如:ALTER TABLE t1 MODIFY b BIGINT
修改表名:ALTER TABLE <table> RENAME TO new_tbl_name,此时无需创建临时表
删除索引、列:ALTER TABLE <table> DROP <index_name>|<column>
在上述操作中,ALTER COLUMN无需构建新表,仅仅是修改了文件.frm,该文件用于保存表的模式信息。
可以通过修改frm文件,来进行表的修改,可以执行的操作包括:
1.移除列的AUTO_INCREAMENT属性
2.添加、删除、更改ENUM和SET常量
主要步骤包括:
1.创建一个布局完全一样的表,并修改需要改变的地方
2.执行FLUSH WITH READ LOCK ,关闭所有正在使用的表并防止表被打开
3.交换.frm文件
4.UNLOCK TABLES
5.删除辅助表
为了对MyISAM的表高速加载数据,可以在加载数据前执行
ALTER TABLE <table> DISABLE KEYS
当数据加载完毕后,在执行
ALTER TABLE <table> ENABLE KEYS
通过这种方式,等所有数据加载完毕后才创建索引,而非加载的过程中创建,从而提高了效率,但DISABLE KEYS仅适用于非唯一索引
另外一个方法是通过新构建表来实现,主要步骤为:
1.创建一个有需要的结构的表(不包括索引),加载数据,以构建MYD文件
2.创建另外一个相同的表(包括索引),构建FRM和MYI文件
3.FLUSH WITH READ LOCK
4.重命名第二个表的FRM和MYI文件,更换名字为第一个表。
5.UNLOCK TABLES。
6.使用REPAIR TABLE创建表的索引
alter table可以使用ALTER COLUMN、MODIFY COLUMN、CHANGE COLUMN来修改列
ALTER COLUMN:用于指定列的新默认值,或删除旧的默认值。如果旧的默认值被删除同时列值为NULL,则新的默认值为NULL。如果列值不能为NULL,MySQL会指定一个默认值;
MODIFY COLUMN:用于对列名进行重命名,如将a修改为b:ALTER TABLE CHANGE a b INT.如果想改变列的类型而不是名字,也需要指定新,旧列名,可以设定为相同。
CHANGE COLUMN:改变列的类型,无需重新命名
如:ALTER TABLE t1 MODIFY b BIGINT
修改表名:ALTER TABLE <table> RENAME TO new_tbl_name,此时无需创建临时表
删除索引、列:ALTER TABLE <table> DROP <index_name>|<column>
在上述操作中,ALTER COLUMN无需构建新表,仅仅是修改了文件.frm,该文件用于保存表的模式信息。
可以通过修改frm文件,来进行表的修改,可以执行的操作包括:
1.移除列的AUTO_INCREAMENT属性
2.添加、删除、更改ENUM和SET常量
主要步骤包括:
1.创建一个布局完全一样的表,并修改需要改变的地方
2.执行FLUSH WITH READ LOCK ,关闭所有正在使用的表并防止表被打开
3.交换.frm文件
4.UNLOCK TABLES
5.删除辅助表
为了对MyISAM的表高速加载数据,可以在加载数据前执行
ALTER TABLE <table> DISABLE KEYS
当数据加载完毕后,在执行
ALTER TABLE <table> ENABLE KEYS
通过这种方式,等所有数据加载完毕后才创建索引,而非加载的过程中创建,从而提高了效率,但DISABLE KEYS仅适用于非唯一索引
另外一个方法是通过新构建表来实现,主要步骤为:
1.创建一个有需要的结构的表(不包括索引),加载数据,以构建MYD文件
2.创建另外一个相同的表(包括索引),构建FRM和MYI文件
3.FLUSH WITH READ LOCK
4.重命名第二个表的FRM和MYI文件,更换名字为第一个表。
5.UNLOCK TABLES。
6.使用REPAIR TABLE创建表的索引
相关文章推荐
- MySQL高效编程--学习笔记
- MySQL学习笔记5:修改表(alter table)
- 高性能mysql笔记(五)加快alter table的速度
- 在MySQL中使用SQL 【数据库高效编程 - 学习笔记 第四章】
- 数据库与MySQL 【数据库高效编程 - 学习笔记 第一章、第二章】
- 启动MySQL 监视器(Monitor) 【数据库高效编程 - 学习笔记 第三章】
- MySQL高效编程--学习笔记
- MySQL学习笔记5:修改表(alter table)
- MYSQL 常识系统回顾和整理【建表、索引、数据同步、高效查询、排错原则】
- mysql笔记(六)--商品系统设计(三):商品属性设计之固定属性
- MySQL学习笔记_8_SQL语言基础复习
- MYSQL笔记
- mysql操作笔记
- 退役笔记二#MySQL = lambda sql : sql + ' Source Code 4 InnoDB '
- 笔记-mysql基础2-改变数据表结构
- MySQL学习笔记9:MySQL存储引擎
- MySQL学习笔记-基础篇
- mysql学习笔记(3)
- MySQL笔记 操作,修改数据表、约束
- MySQL笔记---视图,存储过程, 触发器的使用入门