gpt4 book ai didi

mysql - 手动自增主键-交易和竞速条件

转载 作者:行者123 更新时间:2023-11-30 23:16:32 24 4
gpt4 key购买 nike

这可能不是现实世界的问题,而更像是一个学习主题。

使用 PHP、MySQL 和 PDO,我对 auto_increment 和 lastInsertId() 了如指掌。考虑到主键没有 auto_incerment 属性,我们必须使用类似 SELECT MAX(id) FROM table 的东西来检索最后一个 id,手动递增它,然后 INSERT INTO table (id ) 值 (:lastIdPlusOne)。将整个代码包装在 beginTransactioncommit 中。

这种方法安全吗?如果用户 A 和 B 同时加载这个脚本最后会发生什么?两个交易都会失败?或者两者都会成功(例如,如果最后一个 ID 是 10,则 A 将插入 11,而 B 将插入 12)?

请注意,由于我是一名 PHP 和 MySQL 开发人员,因此我对这种情况下的 MySQL 行为更感兴趣。

最佳答案

如果两者都得到相同的最大值,那么先插入的那个会成功,其他的会失败。

为了在不使用 auto_increment 字段的情况下解决这个问题,您可以在插入之前使用触发器来完成工作(new.id=max),即相同的逻辑,但在触发器中,因此数据库服务器是控制它的人.

不确定在服务器发生故障的情况下这在主-主复制环境中是否 100% 安全。

关于mysql - 手动自增主键-交易和竞速条件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17458834/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com