【发布时间】:2013-12-16 10:25:48
【问题描述】:
我正在使用 MySQL。我创建了两个新表。 在 Employees 表中插入新行后,我故意尝试在 Orders 表中插入一个新行,其引用在 Employees 表中不存在(i知道它会产生错误)。之后,当我尝试在 Orders 表中插入其引用存在于 Employees 表中的新行时,它成功执行但现在第一行 Orders 表的 id 为 2。为什么即使第一个插入语句失败它也会增加
CREATE TABLE Employees
(
EmpID SMALLINT NOT NULL AUTO_INCREMENT PRIMARY KEY,
EmpFN VARCHAR(20) NOT NULL
)
ENGINE=INNODB;
CREATE TABLE Orders
(
OrderID INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
EmpID SMALLINT NOT NULL,
FOREIGN KEY (EmpID) REFERENCES Employees (EmpID)
)
ENGINE=INNODB;
【问题讨论】:
-
没有时间验证我的声明,所以它只是一个评论。但我的猜测是因为 InnoDB 支持事务并完全填充 ACID 范式和
auto_incremenet值的唯一性,所以即使没有事务或没有其他事务在运行,也不还原auto_increment是最安全的方法。
标签: mysql auto-increment