我有一个看起来像这样的表:
+--------+------------+-------------+
| seq_no | date | category_id |
+--------+------------+-------------+
| 1 | 1540225800 | 123 |
| 2 | 1540225900 | 123 |
| 3 | 1540226000 | 123 |
| 1 | 1540226000 | 124 |
+--------+------------+-------------+
在这里,seq_no
是基于date
升序排序的,并按category_id
分组。我想插入一个新行,以便根据上述条件以正确的顺序插入它。例如,在插入null, 1540225850, 123
表之后,将变成这样:
+--------+------------+-------------+
| seq_no | date | category_id |
+--------+------------+-------------+
| 1 | 1540225800 | 123 |
| 2 | 1540225850 | 123 |
| 3 | 1540225900 | 123 |
| 4 | 1540226000 | 123 |
| 1 | 1540226000 | 124 |
+--------+------------+-------------+
如何在一次交易中完成?
我发现this并且得到了我需要类似地执行语句,首先选择新行的正确位置,但是此代码可以在事务中提供与我选择的结果不同的结果,然后更新行。
我想避免保留此列,因为它是派生的列,应该在查询所需的数据之后进行计算,但是在代码库中已经存在很多方案,在这些情况下,我不会获取完整的类别,因此无法在旅途中导出seq_no。
另一种方法是在执行此操作时锁定整个表,但是我想避免这种情况以获得更好的性能。