我有一个带有id,tableid和seqnum的表。这是表结构:
create table ztables
(
id serial primary key,
tableid integer,
seqnum integer
)
和样本数据
+----+---------+-------+
| id | tableid | seqnum|
+----+---------+-------+
| 1 | 5 | 1 |
+----+---------+-------+
| 2 | 5 | 2 |
+----+---------+-------+
| 3 | 5 | 3 |
+----+---------+-------+
| 4 | 5 | 9 |
+----+---------+-------+
| 5 | 6 | 1 |
+----+---------+-------+
| 6 | 7 | 1 |
+----+---------+-------+
| 7 | 7 | 2 |
+----+---------+-------+
| 8 | 7 | 3 |
+----+---------+-------+
让我们以tableid 5为例。您可以看到序列号增加类似于数据库序列。但它不应该增加整个表格。我只希望它增加每个tableid。因此,如果插入另一个带有tableid 5的记录,则seqnum将为10.如果插入了带有tableid 7的记录,则seqnum将为4.执行此类操作的正确方法是什么。我也需要考虑并发问题。
答案 0 :(得分:0)
也许这可以帮助您或至少为您提供解决方案的想法:
insert into ztables (
id,
tableid,
seqnum
)
select ? as id,
tableid,
max(seqnum) + 1 as seqnum
from ztables
where tableid = ?
group
by tableid
union
select ? as id,
? as tableid,
1 as seqnum
from ztables
order
by 3 desc
limit 1;
问号必须由常数值替换。