强制执行行限制而不会阻塞阅读器

时间:2018-08-13 12:17:49

标签: mysql sql

说我有这些表:

  • Users(userId)
  • Classes(classId)
  • 以及多对多关系表UserClasses(userId,classId)。

我如何使用sql强制用户只能在INSERT时最多注册5个类,以使并发写入不会导致UserClasses表中的5行以上?

我认为不可行的解决方案:

  • 在事务SELECT count(*) FROM UserClasses WHERE userId = ?中,如果小于5,则进行后续插入。隔离级别对我而言无关紧要。
  • 使用SELECT FOR UPDATE的解决方案,但它会锁定其他读者的行/表,这是不希望的,而且如果我没看错文档,甚至可能并发不安全。

如果有帮助,我会灵活地更改表定义。

0 个答案:

没有答案