给出下表books
id | listorder
----+-----------
3 | 1
2 | 2
1 | 3
4 | 4
6 | 5
7 | 6
5 | 7
我可以通过执行以下命令将id = 3的行更新为listorder = 6,首先在更新新位置之前重新排序相邻的行:
UPDATE books
SET listorder = listorder - 1
WHERE listorder <= 6 -- The new position
AND listorder > (SELECT listorder
FROM books WHERE id = 3);
UPDATE books
SET listorder = 6 -- The new position
WHERE id = 3;
如何创建一个在 UPDATE或INSERT之前运行的触发器功能,这样我需要做的就是更新listorder,其他行将自动重新排序,无论是否在listorder中移动更高或更低?