Я пытаюсь переместить старые данные из:
this_table >> this_table_archive
копирование всех столбцов. Я пробовал это, но не работает:
INSERT INTO this_table_archive (*) VALUES (SELECT * FROM this_table WHERE entry_date < '2011-01-01 00:00:00');
Примечание: таблицы идентичны и используются id
в качестве первичного ключа.
mysql
select
insert-into
рукав моря
источник
источник
Ответы:
Правильный синтаксис описан в руководстве . Попробуй это:
Если столбцы идентификаторов являются столбцами с автоматическим приращением и у вас уже есть некоторые данные в обеих таблицах, тогда в некоторых случаях вы можете захотеть опустить идентификатор из списка столбцов и вместо этого сгенерировать новые идентификаторы, чтобы избежать вставки идентификатора, который уже существует в исходном стол. Если ваша целевая таблица пуста, это не будет проблемой.
источник
Для синтаксиса это выглядит следующим образом (исключите список столбцов, чтобы неявно означать "все")
Чтобы избежать ошибок первичного ключа, если у вас уже есть данные в архивной таблице
источник
Дополнение к ответу Марка Байерса:
Иногда вы также хотите вставить жестко запрограммированные детали, иначе может произойти сбой уникального ограничения и т. Д. Поэтому используйте следующее в такой ситуации, когда вы переопределяете некоторые значения столбцов.
Здесь стоимость домена добавлена мной жестко, чтобы избавиться от уникального ограничения.
источник
вам не нужен double () для бита значений? если не попробуй (хотя должен быть способ получше
источник
INSERT INTO .. SELECT FROM
, а неINSERT INTO .. VALUES
. Отличная особенность.Дополнительные примеры и детали
источник