将在单个INSERT查询中插入多行保证顺序自动递增主键吗?

问题描述 投票:1回答:1

假设我有这个简单的表格:

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?

换句话说,是否保证跟随SELECT将产生以下行?

SELECT * FROM some_table WHERE id >= 18 LIMIT 3

id    | name
------+--------------
18    | Foo
19    | Bar
20    | Buz

并且如果不能保证此结果,那么交易会保证吗?

如果交易不能保证,可以按顺序检索各个id值吗?

mysql rdbms
1个回答
1
投票

...单个查询是否可以保证顺序自动递增主键?

编号

数据库引擎将确保-但是-它们是不同的。为什么首先要让它们顺序排列?

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

如果需要序号,则意味着您可能希望将它们公开。请勿为此使用主键。也许您应该为该特定目的创建辅助UNIQUE列,并使用漂亮的格式,可爱的编号等。

© www.soinside.com 2019 - 2024. All rights reserved.