数据库版本
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'
的形式来修改吧??
用这种方法修改的话,在表中已存在数据的情况下,修改的时候会不会很慢??

解决方案 »

  1.   

    是的。用ALTER语句。不会,不会慢,因为只是改了表定义,并没有修改表中的数据。
      

  2.   

    嗯...
    我刚也自己测试了下
    如果是添加候选值的话,速度上和普通的修改表结构是一样的
    但如果是删除候选值就会有影响了
    主楼的实例中,如果先添加候选值
    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`字段都更新了,速度就和表的数据多寡有关了