我有一个包含用户,这样一个InnoDB表:
+--------------+-----------------------+
| user_id | name |
+--------------+-----------------------+
| 1 | Bob |
| 1 | Marry |
| 2 | Bob |
| 1 | John |
| 3 | Bob |
| 2 | Marry |
+--------------+-----------------------+
每个插入件我由1,从而例如增加的user_id,鲍勃下一USER_ID将是4
我用这个查询做到这一点:
INSERT INTO users (user_id, name)
SELECT 1 + coalesce((SELECT max(user_id) FROM users WHERE name='Bob'), 0), 'Bob';
现在我需要确保两个不同的用户不会在同一时间增加一个“鲍勃”。 我不希望任何两个鲍勃与USER_ID 4.每个鲍勃的用户ID必须是不同的。
是否有可能在运行上述插入查询时编写和更新锁Bob的所有行? 我无法锁定整个表,因为其他许多用户仍然需要充分获得他们的行。 此外,所有的行应该在任何时候读取。 我会怎么做呢?