Как скопировать строку и вставить в ту же таблицу с автоинкрементным полем в MySQL? - PullRequest
202 голосов
/ 06 февраля 2012

У меня есть таблица Eg- tab.Я пытаюсь скопировать строку с идентификатором столбца автоинкремента = 1 и вставить данные в ту же таблицу с идентификатором строки и столбца = 2.

Используя MySql.Как я могу сделать это в одном запросе? Пожалуйста, помогите

Ответы [ 12 ]

0 голосов
/ 09 января 2017

Я склонен использовать вариант того, что мю слишком коротко опубликовано:

INSERT INTO something_log
SELECT NULL, s.*
FROM something AS s
WHERE s.id = 1;

Пока таблицы имеют одинаковые поля (за исключением автоматического приращения в таблице журнала), тогда это работает хорошо.

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

Это также гарантирует, что если вы добавите новые поля в таблицу, они начнут появляться в таблице журнала немедленно, без необходимости обновлять запросы к вашей базе данных (если, конечно, у вас есть некоторые, которые устанавливают поле явно)

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

Примечание: Если подумать, если вы не работаете над сольным проектом, вы уверены, что другие не будут работать над ним.перечислять все имена полей в явном виде и обновлять операторы журнала при изменении схемы.Этот ярлык, вероятно, не стоит долговременной головной боли, которую он может вызвать ... особенно в производственной системе.

0 голосов
/ 03 декабря 2013

Я искал ту же функцию, но я не использую MySQL.Я хотел скопировать ВСЕ поля, кроме, конечно, первичного ключа (id).Это был однократный запрос, не использованный ни в одном скрипте или коде.

Я нашел способ использовать PL / SQL, но уверен, что подойдет любая другая SQL IDE.Я сделал базовый

SELECT * 
FROM mytable 
WHERE id=42;

Затем экспортировал его в файл SQL, где я мог найти

INSERT INTO table (col1, col2, col3, ... , col42) 
VALUES (1, 2, 3, ..., 42);

Я просто отредактировал его и использовал его:

INSERT INTO table (col1, col2, col3, ... , col42) 
VALUES (mysequence.nextval, 2, 3, ..., 42);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...