gpt4 book ai didi

MySQL插入: Race condition

转载 作者:行者123 更新时间:2023-11-29 20:31:42 26 4
gpt4 key购买 nike

我想知道是否存在插入查询上实际发生竞争条件问题的真实案例。所以我有一个包含以下字段的“用户”表:

User:
iduser | idcompany | name | email

我为此表使用复合主键(iduser、idcompany)。这些字段均未设置为 AUTO_INCRMENT。我通过 session 变量获取“idcompany”字段的值,因此这并不是真正的问题。但是,我使用 getNextUserId() 函数通过这样的选择查询来获取下一个有效的 iduser 值:

SELECT MAX(iduser) + 1 AS next_iduser FROM User WHERE idcompany = {myCompanyId};

我想知道是否存在由于竞争条件而可能在数据库中插入 (iduser, idcompany) 的重复组合的情况,如果是的话,这种情况如何可能。 MySQL 不会在插入时锁定表吗? (iduser, idcompany) simple 的重复组合不会被拒绝,或者我的表中真的可能有重复的主键吗?我知道完全防止竞争条件的策略,例如使用 AUTO_INCRMENT 主键、使用 SQL 事务或手动锁定“用户”表,但我想了解这种情况下可能的竞争条件背后的机制以及真正的问题是什么这个实现。目前,由于显而易见的原因,这些字段在我的表中都不需要是唯一的,但我想知道例如 iduser 上的 UNIQUE 约束是否会改变我面临的场景以及为什么会发生这种情况。

最佳答案

您写道您在 iduser、idcompany 字段上有一个复合主键。此约束将防止表具有重复的 iduser、idcompany 对。如果没有锁定,最糟糕的情况是违反主键将阻止创建用户。

关于MySQL插入: Race condition,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38998297/

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