gpt4 book ai didi

MySql (InnoDB)/Maria : Insert, 忽略、锁定和选择?

转载 作者:行者123 更新时间:2023-11-29 18:43:08 24 4
gpt4 key购买 nike

我正在尝试实现一个最终用户锁定系统,例如,

 "CREATE TABLE foo (
resource_id BIGINT UNSIGNED NOT NULL,
user_id BIGINT UNSIGNED NOT NULL,
PRIMARY KEY (resource_id)
) ENGINE = InnoDB $collate;" );

当用户 checkout 资源时,我想尝试为资源和用户插入一行。给定资源可能已经有另一个用户条目,在这种情况下,我想在仍持有锁的情况下从现有行中选择该用户 ID。如果没有现有行,我希望插入成功,然后在释放锁之前选择我刚刚插入的相同用户 ID。

这样的事情会达到我希望的效果还是有更好的方法?

START TRANSACTION;
INSERT IGNORE INTO foo (resource_id, user_id) VALUES (4, 2)
SELECT user_id FROM foo WHERE resource_id = 4
COMMIT;

最佳答案

根据https://dev.mysql.com/doc/refman/5.7/en/innodb-locks-set.html :

If a duplicate-key error occurs, a shared lock on the duplicate index record is set.

鉴于此,我认为在同一事务中 INSERT IGNORE 然后 SELECT 应该可以工作。

关于MySql (InnoDB)/Maria : Insert, 忽略、锁定和选择?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44812360/

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