MySQL ENUM到VARCHAR的转换问题

时间:2019-03-12 06:22:12

标签: mysql sql enums alter mysql-5.7

我有一个数据类型为"temp_enum_test1"的表"enum('IE','IS')"。当我尝试通过将数据类型从'ENUM'更改为VARCHAR来更改表时,出现重复的输入错误。它正在接受ENUM类型的记录。即使查询表,我也获得唯一的行。任何人都可以在这里帮助我。下面是架构和我的方法。

mysql> CREATE TABLE temp_enum_test1 (
    ->   r_id int(11) NOT NULL,
    ->   r_type enum('IE','IS'),
    ->   UNIQUE KEY uk_temp_enum_test1 (r_id,r_type)
    -> );
Query OK, 0 rows affected (0.38 sec)

mysql> insert into temp_enum_test1 values(1,'IE');
Query OK, 1 row affected (0.07 sec)

mysql> insert into temp_enum_test1 values(1,'IS');
Query OK, 1 row affected (0.05 sec)

mysql> select * from temp_enum_test1;
+------+--------+
| r_id | r_type |
+------+--------+
|    1 | IE     |
|    1 | IS     |
+------+--------+
2 rows in set (0.00 sec)

mysql> alter table temp_enum_test1 change column r_type r_type  varchar(30);
ERROR 1062 (23000): Duplicate entry '1-I' for key 'uk_temp_enum_test1'
mysql> 

1 个答案:

答案 0 :(得分:-1)

问题似乎出在创建表查询上。该表已使用“唯一键”创建,该表在更改表时导致错误。如果可以使用

PRIMARY KEY (`r_id`)

而不是...

UNIQUE KEY uk_temp_enum_test1 (r_id,r_type)

按如下所示完成CREATE命令;

CREATE TABLE IF NOT EXISTS temp_enum_test1 (
  `r_id` int(11) NOT NULL AUTO_INCREMENT,
  `r_type` enum('IE','IS') NOT NULL,
  PRIMARY KEY (`r_id`)
)