我想将一些表从一个数据库移动到另一个数据库,我知道单个表很容易,我已经使用了以下命令,它完美无缺:
alter table my_old_db.mytable rename my_new_db.mytable
但现在情况不同了,我必须将所有这些表移动到以#34; _mp"结尾的新数据库。
答案 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';