Cha*_*had 12 mysql sql insert increment max
我有一个包含许多用户的表.在该表中,我有一个名为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 |
+--------------+-----------------------+
Run Code Online (Sandbox Code Playgroud)
以下查询将执行此操作,但只有在表中已存在"Bob"时才会起作用...
INSERT INTO users(user_id, name) SELECT(SELECT MAX(user_id)+1 from users where
name='Bob'), 'Bob';
Run Code Online (Sandbox Code Playgroud)
如果Bob不存在(第一个条目),则user_id设置为0(零).这就是问题.我需要user_id从1开始而不是0.
Luk*_*ský 17
你可以使用这样的东西:
INSERT INTO users (user_id, name)
SELECT 1 + coalesce((SELECT max(user_id) FROM users WHERE name='Bob'), 0), 'Bob';
Run Code Online (Sandbox Code Playgroud)
但是这样的查询可能导致竞争条件.确保您处于事务中并在运行之前锁定users表.否则你可能会得到两个具有相同数字的Bobs.
您可以使用IFNULL:
INSERT INTO users(user_id, name)
SELECT(IFNULL((SELECT MAX(user_id)+1 from users where name='Bob'), 1), 'Bob';
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
29465 次 |
最近记录: |