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

62o28rlo  于 2021-07-26  发布在  Java
关注(0)|答案(1)|浏览(419)

我需要添加一个主键到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    |       |
+--------------+--------------+------+-----+---------+-------+

我现在要做的是从states获取数据并将其复制到states2,同时添加autoincrement主键。
这就是我尝试过的:

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

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

nwlqm0z1

nwlqm0z11#

您正在明确地指定 null 值设置为主键列,mysql不允许这样做(不能设置主键) null ).
只需将主键列与 insert 语句进行自动递增:

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

相关问题