У меня есть таблица, которая выглядит следующим образом:
+--------+------------+-------------+
| 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 на ходу.
Другой способ - заблокировать всю таблицу во время выполнения этого действия, но я бы хотел избежать такой ситуации для повышения производительности.