繁体   English   中英

MySql(InnoDB)/ Maria:插入,忽略,锁定并选择?

[英]MySql (InnoDB)/Maria: Insert, ignore, lock and select?

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

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

当用户签出资源时,我想尝试为资源和用户插入一行。 对于给定的资源,可能已经有另一个用户条目,在这种情况下,我想从现有行中选择该用户ID,同时仍然保持锁。 如果没有现有行,我希望插入成功,然后在释放锁之前从我刚才插入的用户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

如果出现重复键错误,则会在重复索引记录上设置一个共享锁。

鉴于此,我认为在同一事务中执行INSERT IGNORE然后SELECT应该起作用。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM