Chinaunix首页 | 论坛 | 博客
  • 博客访问: 5205353
  • 博文数量: 1004
  • 博客积分: 8199
  • 博客等级: 中将
  • 技术积分: 13042
  • 用 户 组: 普通用户
  • 注册时间: 2010-05-25 20:19
个人简介

脚踏实地、勇往直前!

文章分类

全部博文(1004)

文章存档

2020年(1)

2019年(93)

2018年(208)

2017年(81)

2016年(49)

2015年(50)

2014年(170)

2013年(52)

2012年(177)

2011年(93)

2010年(30)

分类: Mysql/postgreSQL

2014-08-27 14:34:54


  修改表的frm文件速度很快且mysql有时不必要重建表(任何modify column都需要重建表,表数据量很大的情况下是很消耗时间的),但有一定的风险,在操作之前需要备份数据库.添加,修改或是移除enum列的值和移除列的auto_increment属性都可以使用该方法实现.下面是一个为enum类型列添加新值的例子,直接通过修改frm文件实现.

1.当前表结构
CREATE TABLE `tb_enum_test` (
  `e` enum('fish','apple','dog') NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8

2.创建一个跟需要修改表的结构一致的空表
mysql> create table tb_enum_test_new like tb_enum_test;
Query OK, 0 rows

3.为空表添加enum类型字段新值
mysql> alter table tb_enum_test_new modify e enum('fish','apple','dog','pig') default 'pig';
Query OK, 0 rows affected (0.07 sec)
Records: 0  Duplicates: 0  Warnings: 0


4.关闭所有的表并防止任何表被打开
mysql> flush tables with read lock;
Query OK, 0 rows affected (1.46 sec)

5.frm文件替换

[mysql@node2 hxl]$ ls -1 tb_enum_test*.frm
tb_enum_test.frm
tb_enum_test_new.frm

[mysql@node2 hxl]$ mv tb_enum_test.frm tb_enum_test_tmp.frm
[mysql@node2 hxl]$ mv tb_enum_test_new.frm tb_enum_test.frm
[mysql@node2 hxl]$ mv tb_enum_test_tmp.frm tb_enum_test_new.frm

6.解锁
mysql>unlock tables;

7.查看原来表的enum值,看是否生效
mysql> show columns from tb_enum_test like 'e';
+-------+----------------------------------+------+-----+---------+-------+
| Field | Type                             | Null | Key | Default | Extra |
+-------+----------------------------------+------+-----+---------+-------+
| e     | enum('fish','apple','dog','pig') | YES  |     | pig     |       |
+-------+----------------------------------+------+-----+---------+-------+
1 row in set (0.01 sec)

可以看出已经生效,整个过程是很快的.

-- The End --

阅读(6107) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~