小编典典

MySql INSERT MAX()+ 1的问题

sql

我有一个包含许多用户的表。在该表中,我有一个名为user_id(INT)的列,我想为每个人分别增加。user_id必须从1开始

我准备了一个简单的示例:

Showing all names
+--------------+-----------------------+
| user_id      | name                  |
+--------------+-----------------------+
| 1            | Bob                   |
| 1            | Marry                 |
| 2            | Bob                   |
| 1            | John                  |
| 3            | Bob                   |
| 2            | Marry                 |
+--------------+-----------------------+


Showing only where name = Bob
+--------------+-----------------------+
| user_id      | name                  |
+--------------+-----------------------+
| 1            | Bob                   |
| 2            | Bob                   |
| 3            | Bob                   |
+--------------+-----------------------+

以下查询将执行此操作,但是仅在表中已经存在“鲍勃”的情况下才有效…

INSERT INTO users(user_id, name) SELECT(SELECT MAX(user_id)+1 from users where 
name='Bob'), 'Bob';

如果Bob不存在(第一项),则user_id设置为0(零)。这就是问题。我需要user_id从1而不是0开始。


阅读 271

收藏
2021-05-05

共1个答案

小编典典

您可以使用如下所示的内容:

INSERT INTO users (user_id, name)
SELECT 1 + coalesce((SELECT max(user_id) FROM users WHERE name='Bob'), 0), 'Bob';

但是这样的查询会导致竞争状况。在运行之前,请确保您正在事务中并锁定了用户表。否则,您可能会得到两个具有相同编号的鲍勃。

2021-05-05