auto_increment 属性没有按预期工作

问题描述

我已经初始化了一个数据库 users 像这样 create table users (id not null auto_increment primary key,first_name varchar(256) not null,last_name varchar(256) not null); 但是,我可以只执行 insert into users values (2,'James','Bond'); 并且不会引发错误。我想创建一个表,以便主键自动递增,并且可以简单地添加如下条目:insert into users values ("firstname","lastname"); 这甚至可能吗?谢谢!!

解决方法

当您使用语法 insert into users values ('firstname','lastname'); 时,即您没有指定列列表,这意味着您的 VALUES 子句将包含所有列的值。这与使用 auto_increment 无关,它适用于任何表。

您可以通过指定列来解决此问题:

insert into users (firstname,lastname) values ('firstname','lastname');

通过从列列表中省略 id,它也应该从 VALUES 子句中省略。

MySQL 支持的另一种形式的 INSERT 语法(尽管它是非标准的)可能更清楚。它还允许您省略不想在 INSERT 语句中设置的列。

insert into users SET firstname='firstname',lastname='lastname;

如果您隐式或显式地包含 id 列,则可以使用 NULLDEFAULT 触发自动递增行为,或者如果 sql 模式允许,{ {1}}。

如果您为 0 指定任何其他值,它将覆盖自动增量。

此处记录了所有内容:https://dev.mysql.com/doc/refman/8.0/en/example-auto-increment.html 和该页面链接的相关页面。

,

您可以命名要插入的列。

但是如果你有更多的 t 列,你必须定义 DEFAULT 值,以便 Mysql 知道如何填充未插入的值

INSERT INTO users (first_name,last_name ) VALUEs("firstname","lastname");
,

列是自动递增的这一事实并不意味着您可以在插入语句中忽略它。但是,您可以避免为其分配值并通过使用 default 关键字让 auto_increment 属性处理它:

insert into users values (default,'firstname','lastname');