Синтаксис MySQL для вставки новой строки в средние строки?

mysql sintax для вставки новой строки в средние строки или везде, где мы хотим, без обновления существующей строки, но автоматически увеличивать первичный ключ (id)?

' id | value
' 1  | 100
' 2  | 200
' 3  | 400
' 4  | 500

Я хочу вставить новую строку после id 2 со значением = 300. Я хочу, чтобы результат был следующим:

' id | value
' 1  | 100
' 2  | 200
' 3  | 300  <-- new row with id (automatic increment)
' 4  | 400  <-- id=id+1
' 5  | 500  <-- id=id+1 

Спасибо.

Ответ 1

Вам придется разбить его на 2 операции.

START TRANSACTION;

UPDATE table1 SET id = id + 1 WHERE id >= 3 order by id DESC;

INSERT INTO table1 (id, value) VALUES (3, 300);

COMMIT;

Обратите внимание, что вам нужно order by в операторе обновления, поэтому он начнется с наивысших идентификаторов в первую очередь.

Еще одна идея - объявить id как decimal(10,1) и вставить значение 2.5 как id между 2 и 3.

Ответ 2

insert into my_table (value)
values (select value+100 from my_table order by id desc limit 1)

Ответ 3

Вы не можете использовать функцию автоинкремента для новой строки. Следующее значение автоинкремента всегда будет после получения последнего значения автоинкремента; никогда не промежуточное значение. Единственный способ, который я вижу для этого, довольно болезнен: вставьте новую строку, которая является копией последней строки (чтобы увеличить номер автоинкремента для таблицы), а затем обновите все оставшиеся строки (включая те, которые вы считаете новый).

Если значения уникальны, я задаюсь вопросом о мудрости использования отдельного столбца id. Почему бы не сделать столбец value основным ключом?