在表中插入行并跟踪列表顺序

时间:2013-01-07 14:32:04

标签: database

我有下表:

- id (PK, int, Autoincrement)
- fk (foreign key, int)
- somedata (whatever)
- list_order (int)

我需要按照给定fk的list_order定义的顺序返回一些数据。没问题:SELECT somedata FROM myTable WHERE fk=123 ORDER BY list_order

我的问题涉及如何最好地添加记录,如果我希望它是给定FK的最后一条记录。我是否首先需要为给定的fk查询执行MAX(list_order),然后使用单独的查询来插入新行,还是可以在一个查询中以某种方式执行此操作?请注意,记录的顺序可能会更改,因此我不能简单地删除list_order,并使用ORDER BY id。

由于

1 个答案:

答案 0 :(得分:2)

你可以做一个查询:

INSERT INTO tableX
  ( fk, somedata, list_order)
SELECT
    fk, @somedata, MAX(list_order) + 1
FROM tableX
WHERE fk = @fk ;

缺点是,如果您有许多并发插入语句,则其中两个(或多个)可能会尝试将相同的值插入fklist_order列。因此,由于UNIQUE组合中可能存在(fk, list_order)约束,因此除了其中一个之外的所有约束都会失败。