这个问题已经在这里有了答案: > 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
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。