假设我有这个简单的表格:
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值吗?
...单个查询是否可以保证顺序自动递增主键?
编号
数据库引擎将确保-但是-它们是不同的。为什么首先要让它们顺序排列?
主键不应显得性感或漂亮。主键是技术级别唯一的行标识符,通常对用户隐藏。它们不应显示在UI中或在任何报告中显示给最终用户。
如果需要序号,则意味着您可能希望将它们公开。请勿为此使用主键。也许您应该为该特定目的创建辅助UNIQUE
列,并使用漂亮的格式,可爱的编号等。