数据库
首页 > 数据库> > mysql-为什么insert语句失败后,auto_incremnt列将其值递增

mysql-为什么insert语句失败后,auto_incremnt列将其值递增

作者:互联网

这个问题已经在这里有了答案:            >            Why does MySQL autoincrement increase on failed inserts?                                    4个
我正在使用MySQL.我创建两个新表.
在Employees表中插入新行之后,我特意尝试在Orders表中插入其Employee表中不存在引用的新行(我知道这会产生错误).之后,当我尝试在其雇员表中存在其引用的Orders表中插入新行时,它将成功执行,但现在
Orders表的ID为2.即使第一个insert语句失败,为什么它也会增加

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;

解决方法:

AUTO_INCREMENT仅保证下一个值将大于前一个值,但不保证数字中没有间隙.

这背后有性能原因. AUTO_INCREMENT后面有一个隐藏的计数器,用于存储实际值.这样,该序列就没有事务开销,这在分布式事务环境中可能是相当大的.
db可以一次从磁盘将更多的值预取到其内存中,这大大降低了所需的磁盘io.

标签:auto-increment,mysql
来源: https://codeday.me/bug/20191030/1965574.html