如何在没有主键的情况下向mysql表添加主键

时间:2020-06-16 20:50:33

标签: mysql sql select sql-insert

我需要使用现有数据向Mysql中的表添加主键。

状态:

| Field        | Type         | Null | Key | Default | Extra |
+--------------+--------------+------+-----+---------+-------+
| country_code | varchar(2)   | YES  |     | NULL    |       |
| state_code   | varchar(20)  | YES  |     | NULL    |       |
| state_name   | varchar(255) | YES  |     | NULL    |       |
+--------------+--------------+------+-----+---------+-------+

我创建了一个States2表,该表为空,并且其中包含一个主键。

+--------------+--------------+------+-----+---------+-------+
| Field        | Type         | Null | Key | Default | Extra |
+--------------+--------------+------+-----+---------+-------+
| id           | int(11)      | NO   | PRI | NULL    |       |
| country_code | varchar(2)   | YES  |     | NULL    |       |
| state_code   | varchar(20)  | YES  |     | NULL    |       |
| state_name   | varchar(255) | YES  |     | NULL    |       |
+--------------+--------------+------+-----+---------+-------+

我现在要做的是从州获取数据并将其复制到州2,同时添加自动递增主键。

这是我尝试过的:

mysql> insert into states2 select NULL,states.* FROM states;
ERROR 1048 (23000): Column 'id' cannot be null

复制此密码并同时插入密钥的正确方法是什么?

1 个答案:

答案 0 :(得分:2)

您正在为MySQL不允许的主键列明确分配一个null值(主键不能为null)。

只需将insert语句的主键列分开,以便可以进行自动递增:

insert into states2 (country_code, state_code, state_name) 
select country_code, state_code, state_name FROM states;