В MySQL я пытаюсь скопировать строку с автоинкрементом column ID=1
и вставить данные в ту же таблицу, что и новая строка с column ID=2
.
Как я могу сделать это в одном запросе?
Используйте INSERT ... SELECT
:
insert into your_table (c1, c2, ...)
select c1, c2, ...
from your_table
where id = 1
где c1, c2, ...
все столбцы, кроме id
. Если вы хотите явно вставить со значением id
2, включите его в список столбцов INSERT и в свой SELECT:
insert into your_table (id, c1, c2, ...)
select 2, c1, c2, ...
from your_table
where id = 1
Вы должны будете позаботиться о возможном дубликате id
2 во втором случае, конечно.
IMO, лучше всего использовать SQL-операторы только для копирования этой строки, в то же время ссылаясь только на столбцы, которые вы должны и хотите изменить.
Смотрите также av8n.com - Как клонировать запись SQL
Преимущества:
your_table
в одну атомарную операцию.источник
Error Code: 1113. A table must have at least 1 column
.SET id=NULL
может вызвать ошибкуColumn 'id' cannot be null
. Должен быть замененUPDATE temp_table SET id = (SELECT MAX(id) + 1 as id FROM your_table);
Скажи, что стол есть
user(id, user_name, user_email)
.Вы можете использовать этот запрос:
источник
Result: near "SELECT": syntax error
Это помогло и поддерживает столбцы BLOB / TEXT.
источник
Для быстрого, чистого решения, которое не требует именования столбцов, вы можете использовать подготовленный оператор, как описано здесь: https://stackoverflow.com/a/23964285/292677
Если вам нужно сложное решение, чтобы вы могли делать это часто, вы можете использовать эту процедуру:
Вы можете запустить его с:
Примеры
ОТКАЗ ОТ ОТВЕТСТВЕННОСТИ: Это решение предназначено только для тех, кто часто будет дублировать строки во многих таблицах. Это может быть опасно в руках мошенника.
источник
Вы также можете передать «0» в качестве значения для столбца для автоматического увеличения, правильное значение будет использовано при создании записи. Это намного проще, чем временные таблицы.
Источник: Копирование строк в MySQL (см. Второй комментарий от TRiG, к первому решению от Lore)
источник
Здесь много отличных ответов. Ниже приведен пример хранимой процедуры, которую я написал для выполнения этой задачи для разрабатываемого веб-приложения:
источник
источник
Если вы можете использовать MySQL Workbench, вы можете сделать это, щелкнув правой кнопкой мыши по строке и выбрав «Копировать строку», затем щелкнув правой кнопкой мыши пустую строку и выбрав «Вставить строку», затем изменив идентификатор, а затем нажав «Применить».
Скопируйте строку:
Вставьте скопированную строку в пустую строку:
Изменить идентификатор:
Подать заявление:
источник
Я искал ту же функцию, но я не использую MySQL. Я хотел скопировать ВСЕ поля, кроме, конечно, первичного ключа (id). Это был одноразовый запрос, который нельзя использовать ни в одном скрипте или коде.
Я нашел свой путь с PL / SQL, но я уверен, что подойдет любая другая SQL IDE. Я сделал базовый
Затем экспортируйте его в файл SQL, где я мог бы найти
Я только отредактировал это и использовал это:
источник
Я склонен использовать вариант того, что мю слишком коротко опубликовано:
Пока таблицы имеют одинаковые поля (за исключением автоматического приращения в таблице журнала), это работает хорошо.
Поскольку я использую хранимые процедуры, когда это возможно (чтобы облегчить жизнь другим программистам, которые не слишком знакомы с базами данных), это решает проблему необходимости возвращаться и обновлять процедуры каждый раз, когда вы добавляете новое поле в таблицу.
Это также гарантирует, что если вы добавите новые поля в таблицу, они начнут появляться в таблице журнала немедленно, без необходимости обновлять запросы к вашей базе данных (если, конечно, у вас есть поля, которые явно задают поле)
Предупреждение: вы должны убедиться, что добавили все новые поля в обе таблицы одновременно, чтобы порядок полей не изменился ... в противном случае вы начнете получать странные ошибки. Если вы единственный, кто пишет интерфейсы базы данных, и вы очень осторожны, тогда это работает хорошо. В противном случае придерживайтесь имен всех ваших полей.
Примечание: если подумать, если вы не работаете над сольным проектом, вы уверены, что другие люди не будут над ним работать, будут явно указывать все имена полей и обновлять операторы журнала при изменении схемы. Этот ярлык, вероятно, не стоит долговременной головной боли, которую он может вызвать ... особенно в производственной системе.
источник
источник
Дамп строки, которую вы хотите sql, а затем используйте сгенерированный SQL, за исключением столбца ID, чтобы импортировать его обратно.
источник