2

私は mysql でかなりアマチュアです..単一のクエリでデータベース全体のテーブルプレフィックスを変更する方法を教えてください.手動で行うことはできますが、すべてのテーブルプレフィックスを変更するにはかなり時間がかかります. 私を助けてください。isc_administrator_log から cus_administrator_log のように isc_ から cus_ を意味します

これら2つの解決策を見つけましたが、どちらも理解していません。

SELECT 
GROUP_CONCAT('RENAME TABLE `', TABLE_SCHEMA, '`.`', TABLE_NAME, '` TO `', 
TABLE_SCHEMA, '`.`prefix_', TABLE_NAME, '`;' SEPARATOR ' ')
FROM `TABLES` WHERE `TABLE_SCHEMA` = "test";

SELECT 
CONCAT('RENAME TABLE ', GROUP_CONCAT('`', TABLE_SCHEMA, '`.`', TABLE_NAME,
'` TO `', TABLE_SCHEMA, '`.`prefix_', TABLE_NAME, '`')) AS q
FROM 
`information_schema`.`Tables` WHERE TABLE_SCHEMA='test';
4

3 に答える 3

1

両方のステートメントは、たまたまSQLステートメントである文字列を生成し、プロンプトでコピー/貼り付けてテーブルの名前を変更できます。

次の 2 つの文字列を必要な実際の値に置き換えるだけです。

prefix_: 追加するプレフィックス

'test': 名前を変更するテーブルを含むデータベースの名前

どちらのステートメントもほぼ同じですが、唯一の違いはinformation_schema、最初のステートメントで明示的に言及されていないことです。したがって、最初のステートメントはデータベースから実行する必要があります (事前にinformation_schema発行)。USE information_schema

于 2013-05-02T13:59:25.367 に答える
0

MySQL 5.0.13動的SQLクエリを実行できます


delimiter // 
CREATE PROCEDURE dynamic(IN tbl CHAR(64), IN col CHAR(64))
BEGIN
    SET @s = CONCAT('SELECT 'RENAME TABLE ', 
             GROUP_CONCAT('', TABLE_SCHEMA, ''.'', TABLE_NAME,
             ' TO ', TABLE_SCHEMA, ''='.prefix_''', TABLE_NAME, '')) AS q
             FROM 
             information_schema.Tables WHERE TABLE_SCHEMA='test'';;'
    PREPARE stmt FROM @s;
    EXECUTE stmt;
END
//
delimiter ;

ここから参照を取得しました

于 2013-05-02T13:58:37.613 に答える