MySQL 修改 UNIQUE 字段为非 UNIQUE 字段(直接删索引)
设计表有个字段设计错了,但本地已经有一些测试数据了,不想删表重建,又得费工夫导数据。
于是 modify 该字段,发现不生效。原来修改 unique 字段为非 unique 是要用删除索引的方法(unique 字段默认会创建索引),删除了索引,就不是 unique 了。
首先根据字段名查找关联的索引:
SHOW INDEX FROM table_name WHERE Column_name='column_name';
然后删除索引:
ALTER TABLE table_name DROP INDEX index_name;
举个例子
现有一张 user 表,不小心把 password 字段设置为 unique 的了:
CREATE TABLE IF NOT EXISTS `user`
(
`id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
`username` VARCHAR(250) UNIQUE DEFAULT NULL COMMENT '用户名',
`phone` VARCHAR(250) UNIQUE DEFAULT NULL COMMENT '手机号',
`password` VARCHAR(250) UNIQUE DEFAULT NULL COMMENT '密码',
`age` INT(10) UNSIGNED NOT NULL DEFAULT 0 COMMENT '年龄',
`sex` TINYINT(1) UNSIGNED NOT NULL DEFAULT 0 COMMENT '性别',
`created_at` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
`updated_at` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (`id`)
)
ENGINE = InnoDB
DEFAULT CHARACTER SET = `utf8mb4` COMMENT = '用户表';
于是先查找 password 字段对应的索引名称:
SHOW INDEX FROM user WHERE Column_name='password';
索引名也叫 password,删除该索引:
ALTER TABLE user DROP INDEX password;
再次查看 user 表,索引已被删除,问题解决。