如何在MySQL中从一个数据库移动表(以某些后缀结尾)到另一个数据库?

时间:2017-05-01 06:14:50

标签: php mysql

我想将一些表从一个数据库移动到另一个数据库,我知道单个表很容易,我已经使用了以下命令,它完美无缺:

alter table my_old_db.mytable rename my_new_db.mytable

但现在情况不同了,我必须将所有这些表移动到以#34; _mp"结尾的新数据库。

2 个答案:

答案 0 :(得分:4)

有一种方法可以通过外部文件来完成。这是我的意思:

 function changeSchema($oldName, $newName, $type, $len)
{
    $res = mysql_query("SELECT DISTINCT TABLE_NAME
        FROM INFORMATION_SCHEMA.TABLES
        WHERE TABLE_NAME LIKE '%_mp'  AND 
        TABLE_SCHEMA = 'your_database_name'");
    if($res){
        while($line=mysql_fetch_object($res)){
             mysql_query("ALTER TABLE db1.$line->TABLE_NAME rename db2.$line->TABLE_NAME");
        }
    }
}

答案 1 :(得分:0)

您无法在一个声明中执行此操作。 RENAME TABLE或ALTER TABLE语句中不支持通配符。

至少RENAME TABLE可以在一个语句中重命名多个表,但只能指定固定的表名。因此,您可以生成一个RENAME TABLE语句,该语句一次性移动所有表:

SELECT CONCAT('RENAME TABLE ',
   GROUP_CONCAT(CONCAT('my_old_db.`', TABLE_NAME, '` TO my_new_db.`', TABLE_NAME, '`')),
   ';') AS _sql
FROM INFORMATION_SCHEMA.TABLES 
WHERE TABLE_SCHEMA='my_old_db' AND TABLE_NAME LIKE '%\_mp';