Поменять данные между таблицами mysql
Есть две одинаковых по структуре таблицы, в одной хранятся одни данные, в другой другие. Как поменять данные между ними местами?
Что-то приближенное:
INSERT INTO db2.tb SELECT * FROM db1.tb;
Но это заменит данные в db2 на db1, мне необходимо их поменять, пробовал переименовать но при уже созданных таблицах переименовывать не хочет
Ответы (2 шт):
Если имеются внешние ключи, то надо переносить данные через временную таблицу.
Если имеются ещё и триггеры, их придётся удалить перед обменом и пересоздать после.
CREATE TABLE test.tempTable SELECT * FROM db2.tb;
TRUNCATE db2.tb;
INSERT INTO db2.tb SELECT * FROM db1.tb;
TRUNCATE db1.tb;
INSERT INTO db1.tb SELECT * FROM test.tempTable;
DROP test.tempTable;
Если количество записей в таблицах невелико, можно test.tempTable сделать ENGINE = Memory, это снизит потребность в дисковых операциях.
Поскольку имеются внешние ключи на таблицы - надо отключить их проверку на время выполнения переноса. Правда, есть опасность потом не включить, если данные не проходят контроль.
Не надо делать временную таблицу TEMPORARY - если посередь процесса что-то засбоит, будет мучительно больно.