mysql - 如何在没有主键的mysql表中添加主键
问题描述
我需要使用现有数据向 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
复制这个并同时插入密钥的正确方法是什么?
解决方案
您明确地null
为主键列分配了一个值,这是 MySQL 不允许的(主键不能是null
)。
只需将主键列从insert
语句中分离出来,这样就可以发生自动增量:
insert into states2 (country_code, state_code, state_name)
select country_code, state_code, state_name FROM states;
推荐阅读
- python - Wikipedia API for Python:如何从相应页面获取项目 ID?
- floating-point - 理解 IEEE 754:为什么 convertFromInt 和 convertToIntegerXXX 被归类为算术运算而不是转换运算?
- python - 如何在烧瓶中制作上传文件
- javascript - 如何在反应中从功能组件访问文件
- php - function.php (wordpress) - 如果包含 iframe,则将类添加到 P
- laravel - 使用值后端 laravel 对 Datatable vuetify 进行排序
- python - 为什么 os.path.isabs() 给出不正确的输出?
- nginx - NGINX 根据端点重定向到不同的服务器
- c# - 在 C# 中将重复记录从 excel 丢弃到 Mysql
- prometheus - windows exporter-Prometheus-grafana 客户网络转公司网络