MySQL - копировать записи в другую таблицу и удалять существующую - PullRequest
2 голосов
/ 14 сентября 2011

Я пытаюсь обработать следующее в одном операторе sql - я хочу скопировать количество записей в таблицу архива и сразу удалить существующие из основной таблицы.

Что-то вроде:

INSERT INTO `table_archive` 
SELECT * FROM `table_main`
WHERE `id` IN (1, 2, 3, 4)
REMOVE FROM `table_main` WHERE `id` IN (1, 2, 3, 4)

Это в основном похоже на вырезание и вставку записей из одной таблицы в другую.

Очевидно, что вышеприведенное утверждение - это то, чего я хочу достичь - любая идея, если она вообще достижима и какое выражение SQLэто будет?

Ответы [ 3 ]

3 голосов
/ 14 сентября 2011

как уже упоминалось, вам нужно использовать несколько команд DML:

START TRANSACTION;
INSERT INTO `table_archive`  SELECT * FROM `table_main` WHERE `id` IN (1, 2, 3, 4); 
DELETE`table_main` WHERE `id` IN (1, 2, 3, 4); 
COMMIT;

см .: http://dev.mysql.com/doc/refman/5.0/en/commit.html

1 голос
/ 14 сентября 2011

Совсем не возможно. Сделайте отдельное УДАЛЕНИЕ и оберните все это в транзакции (если вы используете язык, который поддерживает транзакции, в отличие от консоли MYSQL, которая, я не уверен, поддерживает транзакции).

1 голос
/ 14 сентября 2011

Нет, вы не можете сделать это в одном запросе.Вы можете, однако, попытаться сделать это в транзакции, чтобы он обрабатывался как один запрос.Либо все успешно, либо не происходит вообще.

Это предполагает, что ваши таблицы имеют тип InnoDB.MyISAM не поддерживает транзакции.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...