MySQL вставить строку посередине, с производным / рассчитанным столбцом на основе отсортированного порядка других столбцов? - PullRequest
0 голосов
/ 06 декабря 2018

У меня есть таблица, которая выглядит следующим образом:

+--------+------------+-------------+
| 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 на ходу.

Другой способ - заблокировать всю таблицу во время выполнения этого действия, но я бы хотел избежать такой ситуации для повышения производительности.

...