Обновление
При вставке подмножества данных вам необходимо следовать INSERT
с DELETE
, если вы используете InnoDB, заключите его в транзакциютак что действие является атомарным.
С ORDER BY RAND()
у вас возникнет серьезная проблема, поскольку вы не будете знать, какие строки были удалены.Вероятно, понадобится временная таблица для хранения целевых строк.
BEGIN TRANSACTION;
CREATE TEMPORARY TABLE `target_keys`
SELECT `id` FROM `old_table` ORDER BY RAND() LIMIT 0,5;
INSERT INTO `new_table` VALUES
(SELECT * FROM `old_table` WHERE `id` IN (SELECT `id` FROM `target_keys`));
DELETE FROM `old_table` WHERE `id` IN (SELECT `id` FROM `target_keys`);
DROP TABLE `target_keys`;
COMMIT;
Ответ перед редактированием
Если вы перемещаете все строки какв вашем примере, почему бы просто не переименовать таблицу ?
RENAME TABLE old_name TO new_name
Если это подмножество данных, то вам нужно следовать за INSERT
с помощью DELETE
, если вы используете InnoDB, оберните его в транзакцию, чтобы действие было атомарным.