MySQL在中间插入一行,并根据其他列的排序顺序派生/计算列?

时间:2018-12-06 11:18:04

标签: mysql transactions sql-update sql-insert insert-update

我有一个看起来像这样的表:

+--------+------------+-------------+
| 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。

另一种方法是在执行此操作时锁定整个表,但是我想避免这种情况以获得更好的性能。

0 个答案:

没有答案