主键自动增量在MYSQL上不起作用
我的插入声明主键自动增量在MYSQL上不起作用,mysql,sql,primary-key,auto-increment,Mysql,Sql,Primary Key,Auto Increment,我的插入声明 CREATE TABLE people ( id INT NOT NULL AUTO_INCREMENT, first_name VARCHAR(50) NOT NULL, salary INT NOT NULL, PRIMARY KEY (id) ); 应该是: INSERT INTO people VALUES ('Austin', 65000), ('Josh', 100000), ('Pettea', 55000) ; 试试看 这是一把小
CREATE TABLE people (
id INT NOT NULL AUTO_INCREMENT,
first_name VARCHAR(50) NOT NULL,
salary INT NOT NULL,
PRIMARY KEY (id)
);
应该是:
INSERT INTO people
VALUES
('Austin', 65000),
('Josh', 100000),
('Pettea', 55000)
;
试试看
这是一把小提琴:
单击“运行”
编辑:
我想我误解了您的评论:在这种情况下,您需要指定要插入数据的列。目前,您的查询正在尝试将两列数据值插入到三列表中<代码>插入到人员中类似于插入到人员中(id、名字、薪水)
因此插入两列值的数据返回的列计数与第1行的值计数不匹配
错误。如果您喜欢这样做,这是可以接受的:
INSERT INTO people(first_name, salary)
VALUES
('Austin', 65000),
('Josh', 100000),
('Pettea', 55000);
但是您将id
列设置为AUTO\u INCREMENT
是有原因的,因此不需要手动填充它。它应该是:
INSERT INTO people
VALUES
('Austin', 65000),
('Josh', 100000),
('Pettea', 55000)
;
试试看
这是一把小提琴:
单击“运行”
编辑:
我想我误解了您的评论:在这种情况下,您需要指定要插入数据的列。目前,您的查询正在尝试将两列数据值插入到三列表中<代码>插入到人员中类似于插入到人员中(id、名字、薪水)
因此插入两列值的数据返回的列计数与第1行的值计数不匹配
错误。如果您喜欢这样做,这是可以接受的:
INSERT INTO people(first_name, salary)
VALUES
('Austin', 65000),
('Josh', 100000),
('Pettea', 55000);
但是您将id
列设置为自动增量
,原因是不需要手动填充它。列数量(表结构中跳过其列表时的总列数量)必须与值数量强烈匹配
因此,请指定列名:
INSERT INTO people
VALUES
(1,'Austin', 65000),
(2,'Josh', 100000),
(3,'Pettea', 55000);
或指定每列的值:
INSERT INTO people (first_name, salary)
VALUES
('Austin', 65000),
('Josh', 100000),
('Pettea', 55000);
在上一段代码中,可以使用零值或默认关键字而不是NULL。这三个值中的任何一个都会产生新的值
PS.首选前一个代码-如果结构发生更改,则不需要在任何版本中使用
PPS。我建议将自动递增列数据类型定义为UNSIGNED-这将使可能自动生成的值的数量加倍。列数量(表结构中跳过其列表时的总列数量)必须与值数量强烈匹配
因此,请指定列名:
INSERT INTO people
VALUES
(1,'Austin', 65000),
(2,'Josh', 100000),
(3,'Pettea', 55000);
或指定每列的值:
INSERT INTO people (first_name, salary)
VALUES
('Austin', 65000),
('Josh', 100000),
('Pettea', 55000);
在上一段代码中,可以使用零值或默认关键字而不是NULL。这三个值中的任何一个都会产生新的值
PS.首选前一个代码-如果结构发生更改,则不需要在任何版本中使用
PPS。我建议将自动递增列数据类型定义为UNSIGNED-这会将可能自动生成的值的数量增加两倍。因此,默认情况下,如果我没有指定列,它不会自动填充id?您不需要指定id列,因为它是自动递增的。它将根据上次运行的编号自行填充。但是,如果仍然希望手动填充id列,则可以。请参考此示例,以便在默认情况下,如果我没有指定列,它不会自动填充id?您不需要指定id列,因为它是自动递增的。它将根据上次运行的编号自行填充。但是,如果仍然希望手动填充id列,则可以。请参阅此示例。无法使用此插入查询复制任何内容,该查询会引发error@NicoHaase您必须收到“列计数与第1行的值计数不匹配”错误消息。也许你试图用另一个数据库管理系统重现这个问题?@Akina完全正确。所以奇怪的问题是:OP“不工作”是什么意思?MYSQL允许您覆盖自动增量列(只要主键不重复)因此,我怀疑您必须指定要插入的列,而不是mysql,前提是提供的值适用于除AI列以外的所有列error@NicoHaase您必须收到“列计数与第1行的值计数不匹配”错误消息。也许你试图用另一个数据库管理系统重现这个问题?@Akina完全正确。所以奇怪的问题是:OP“不工作”是什么意思?MYSQL允许您覆盖自动增量列(只要主键不重复)因此,我怀疑您必须指定要插入的列,而不是mysql,假设提供的值适用于除AI列以外的所有列。