Ваш вопрос предполагает, что строки имеют какой-то встроенный порядок в них, и что вы можете вставлять строки между другими строками.Это не так.
Это правда, что строки имеют порядок на диске и столбец id
обычно назначается по порядку, но это детали реализации.Когда вы выполняете запрос, база данных может свободно возвращать строки в любом порядке по своему выбору, если только вы не укажете, что вы хотите, с помощью предложения ORDER BY
.
Теперь я предполагаю, что вы действительно хотите этовставить строки между существующими строками в порядке id
.Один из способов получить то, что вы хотите, будет выглядеть так:
UPDATE t1 SET id = id * 2
INSERT INTO t1 (id, column) SELECT id+1, "hello" FROM t1
UPDATE
удвоит идентификаторы всех существующих строк (таким образом, 1,2,3 становится 2,4,6);тогда INSERT
будет выполнять запрос в t1 и использовать результат для вставки нового набора строк со значениями id
, которые на одну единицу больше, чем существующие строки (таким образом, 2,4,6 становится 3,5,7).
Я не проверял вышеупомянутые операторы, поэтому я не знаю, будут ли они работать, или они требуют какой-то дополнительной хитрости (например, временной таблицы), поскольку мы запрашиваем и обновляем одну и ту же таблицу в одном операторе.Также, возможно, я допустил синтаксическую ошибку.