mysql - auto_increment 属性未按预期工作

标签 mysql sql-insert auto-increment

我已经初始化了一个数据库users,如下创建表users(id不为空auto_increment主键,first_name varchar(256)不为空,last_name varchar(256)不为空); 但是,我可以执行 insert into users value (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 模式允许,则为 0

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

这一切都记录在这里:https://dev.mysql.com/doc/refman/8.0/en/example-auto-increment.html以及该页面链接的相关页面。

关于mysql - auto_increment 属性未按预期工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68229771/

相关文章:

mysql - Select 中的条件计数/求和

mysql - 如何使用 Servlet 和 AJAX 下载 MySQL 的 BLOB?

mysql - 如何在环回中定义主键、外键

javascript - 当我的 html 中的一列有两个不同的名称时,如何在数据库中插入数据?

sql - 带有备用连续出版物的列

mysql - 我如何在 Laravel 中编写此 SQL 查询?编写 mySQL 的正确方法 HAVING

python - 优化数据上传(MySQL、Python)

sql - 在 RETURNING 语句中使用记录作为函数参数

macros - 使用 Notepad++ 我如何使数字递增的宏类型情况?

mysql - 使列 auto_increment 并重新定位