Синтаксис 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
основным ключом?