我有一个包含用户的InnoDB表,像这样:
“每次插入时,我会将user_id增加1,因此例如Bob的下一个user_id将是4。”
“我使用以下查询来执行此操作:”
现在我需要确保两个不同的用户不会同时添加一个“Bob”。我不希望有两个用户ID为4的Bobs。每个Bob的用户ID必须不同。
当运行上述插入查询时,是否可以编写和更新锁定所有Bob的行?我不能锁定整个表,因为许多其他用户仍需要完全访问其行。此外,所有行应始终可读。我该如何做到这一点?
+--------------+-----------------------+
| user_id | name |
+--------------+-----------------------+
| 1 | Bob |
| 1 | Marry |
| 2 | Bob |
| 1 | John |
| 3 | Bob |
| 2 | Marry |
+--------------+-----------------------+
“每次插入时,我会将user_id增加1,因此例如Bob的下一个user_id将是4。”
“我使用以下查询来执行此操作:”
INSERT INTO users (user_id, name)
SELECT 1 + coalesce((SELECT max(user_id) FROM users WHERE name='Bob'), 0), 'Bob';
现在我需要确保两个不同的用户不会同时添加一个“Bob”。我不希望有两个用户ID为4的Bobs。每个Bob的用户ID必须不同。
当运行上述插入查询时,是否可以编写和更新锁定所有Bob的行?我不能锁定整个表,因为许多其他用户仍需要完全访问其行。此外,所有行应始终可读。我该如何做到这一点?