Mysql 在一个INSERT查询中插入多行会保证连续自动递增主键吗?

Mysql 在一个INSERT查询中插入多行会保证连续自动递增主键吗?,mysql,rdbms,Mysql,Rdbms,假设我有一张简单的表格: CREATE TABLE some_table ( id INT(11) PRIMARY KEY AUTOINCREMENT, name VARCHAR(20) ); 使用此INSERT语句: INSERT INTO some_table (name) VALUES ("Foo"), ("Bar"), ("Buz"); 结果给了我一个例子: fieldCount = 0 affectedRows = 3 insertId = 18 info = 'Recor

假设我有一张简单的表格:

CREATE TABLE some_table (
  id INT(11) PRIMARY KEY AUTOINCREMENT,
  name VARCHAR(20)
);
使用此INSERT语句:

INSERT INTO some_table (name) VALUES ("Foo"), ("Bar"), ("Buz");
结果给了我一个例子:

fieldCount = 0
affectedRows = 3
insertId = 18
info = 'Records: 3  Duplicates: 0  Warnings: 0',
serverStatus = 2
warningStatus = 0
在执行SELECT语句时,我看到第一个插入行的insertId=18;是否保证后续插入的文档具有顺序id

换句话说,是否保证follow SELECT将生成以下行

SELECT * FROM some_table WHERE id >= 18 LIMIT 3

id    | name
------+--------------
18    | Foo
19    | Bar
20    | Buz
如果这个结果不能得到保证,那么交易会保证吗

如果一个事务不能保证它,是否可以按顺序检索各个id值

…单个查询能否保证连续自动递增主键

没有

然而,数据库引擎将确保它们是不同的。首先,你为什么希望它们是连续的

主键不应该性感或好看。主键是技术级别的唯一行标识符,通常对用户隐藏。它们不应显示在UI中,也不应在任何报告中显示给最终用户


如果您需要序列号,这意味着您可能想在某个地方公开它们。不要为此使用主键。也许你应该为这个特定的目的创建一个第二个唯一的列,具有良好的格式、可爱的编号等等。

上面的断言完全是不真实的。这回答了你的问题吗?虽然mysql进行了一些优化,但CPU也可以进行优化,因此,如果负载较高,则顺序和id不能连续。transqaction可能会有帮助,但您锁定了表,这也没有帮助。您的表不正确,id必须是autoimcrement,否则在编写API时将不会有帮助,我正在寻找优化批量插入的方法,但由于MySQL不支持返回,并且只提供最后一个插入的id,并将其设置为实际插入的第一行,插入了许多行,我希望通过处理有限的结果来更新数据,而不是单独插入行。我真的不在乎ID是否是连续的,我只想得到它们的值。我可能错了,我记不清了。当我从JDBCJava使用MySQL时,getKeys方法将返回一个包含所有新创建的键的ResultSet。但我需要检查一下。您使用什么语言/驱动程序来调用查询?我在mysql2模块中使用Node.js。