数据库版本
MySQL 5.1.46CREATE TABLE `t1`(
`f1` ENUM('a','b','c','d') DEFAULT 'a'
);INSERT INTO `t1` VALUES(1),(4),(2);
直接用SQL语言的话,能否在表已存在数据的情况下修改字段的候选值?用PHP的话就是通过
SHOW FULL COLUMNS FROM `t1` LIKE 'f1'
然后再用
ALTER TABLE `t1` CHANGE `f1` `f1` ENUM('a','b','c','d','e') DEFAULT 'a'
的形式来修改吧??
用这种方法修改的话,在表中已存在数据的情况下,修改的时候会不会很慢??
MySQL 5.1.46CREATE TABLE `t1`(
`f1` ENUM('a','b','c','d') DEFAULT 'a'
);INSERT INTO `t1` VALUES(1),(4),(2);
直接用SQL语言的话,能否在表已存在数据的情况下修改字段的候选值?用PHP的话就是通过
SHOW FULL COLUMNS FROM `t1` LIKE 'f1'
然后再用
ALTER TABLE `t1` CHANGE `f1` `f1` ENUM('a','b','c','d','e') DEFAULT 'a'
的形式来修改吧??
用这种方法修改的话,在表中已存在数据的情况下,修改的时候会不会很慢??
我刚也自己测试了下
如果是添加候选值的话,速度上和普通的修改表结构是一样的
但如果是删除候选值就会有影响了
主楼的实例中,如果先添加候选值
alter table `t1` change `f1` `f1` enum('a','b','c','d','e','f') default 'a';
添加后什么也不做,然后马上执行
alter table `t1` change `f1` `f1` enum('a','b','c','d') default 'a';
应该是相当于把整张表的`f1`字段都更新了,速度就和表的数据多寡有关了