Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/80.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
主键自动增量在MYSQL上不起作用_Mysql_Sql_Primary Key_Auto Increment - Fatal编程技术网

主键自动增量在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列以外的所有列。