我已经初始化了一个数据库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
列,则可以使用 NULL
、DEFAULT
、或者如果 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/