Задача - скопировать таблицы из одной базы в другую, поменяв имя таблиц (добавить префикс). Можно сделать через mysqldump | sed | mysql, а можно так:
Первое заполнение можно сделать примерно так
SELECT concat('CREATE TABLE maindb.', TABLE_NAME, ' LIKE tmpdb.', TABLE_NAME, ';') FROM information_schema.TABLES WHERE TABLE_SCHEMA = 'tmpdb';
SELECT concat('INSERT INTO maindb.', TABLE_NAME, ' SELECT * FROM tmpdb.', TABLE_NAME, ';') FROM information_schema.TABLES WHERE TABLE_SCHEMA = 'tmpdb';
Но.. надо сохранить вывод в файл (например через mysql -b -e '...' > tmp.sql) и выполнить, а можно прямо в консоли mysql, будет дальше.
Без временного файла это будет выглядеть так
T1=$(mysql -b -s -r -e "SELECT concat('CREATE TABLE maindb.prefix_', TABLE_NAME, ' LIKE tmpdb.', TABLE_NAME, ';') FROM information_schema.TABLES WHERE TABLE_SCHEMA = 'tmpdb';")
mysql -e "$T1"
T2=$(mysql -b -s -r -e "SELECT concat('INSERT INTO maindb.prefix_', TABLE_NAME, ' SELECT * FROM tmpdb.', TABLE_NAME, ';') FROM information_schema.TABLES WHERE TABLE_SCHEMA = 'tmpdb';")
mysql -e "$T2"
Но, заполнили первый раз базу, обновляем - а теперь нужно сначала удалить все старые таблицы.
https://phoenixnap.com/kb/mysql-drop-table
(нюанс: мария 10.5 - не работает select * FROM information_schema.tables WHERE @schema = database(); - нужно убрать @schema = database(); )
Комментариев нет:
Отправить комментарий