我不是 DBA。我有一个 MySQL 数据库 (5.0.51a) 的情况,我想删除所有具有此前缀的表(大约 110 个表)的“dr_”前缀。我当然可以一一重命名它们,但我想知道是否有 SQL 命令可以一次性执行此操作?
为了清楚起见,dr_hjkd
必须将名为 的表重命名为hjkd
。名为的表rfefd
将保持相同的名称。谢谢。
尽管如此,你的问题是独一无二的。
它是这样的:
如果您要重命名数据库中的所有表mydb
,这里是您需要的查询:
SELECT
CONCAT('ALTER TABLE ',db,'.',old_tblname,' RENAME ',db,'.',new_tblname,';')
FROM
(
SELECT
table_schema db,
table_name old_tblname,
substr(table_name,4) new_tblname
FROM
information_schema.tables
WHERE
SUBSTR(table_name,1,3)='dr_'
AND table_schema = 'mydb'
) A;
Run Code Online (Sandbox Code Playgroud)
在操作系统中运行它并将其捕获到 SQL 文件中。然后,执行 SQL 文件。
mysql -u... -p... -AN -e"SELECT CONCAT('ALTER TABLE ',db,'.',old_tblname,' RENAME ',db,'.',new_tblname,';') FROM (SELECT table_schema db,table_name old_tblname,substr(table_name,4) FROM information_schema.tables WHERE SUBSTR(table_name,1,3)='dr_' AND table_schema = 'mydb') A" > BigRename.sql
mysql -u... -p... < BigRename.sql
Run Code Online (Sandbox Code Playgroud)
如果您要重命名所有数据库中的所有表,这里是您需要的查询:
SELECT
CONCAT('ALTER TABLE ',db,'.',old_tblname,' RENAME ',db,'.',new_tblname,';')
FROM
(
SELECT
table_schema db,
table_name old_tblname,
substr(table_name,4) new_tblname
FROM
information_schema.tables
WHERE
SUBSTR(table_name,1,3)='dr_'
) A;
Run Code Online (Sandbox Code Playgroud)
在操作系统中运行它并将其捕获到 SQL 文件中。然后,执行 SQL 文件。
mysql -u... -p... -AN -e"SELECT CONCAT('ALTER TABLE ',db,'.',old_tblname,' RENAME ',db,'.',new_tblname,';') FROM (SELECT table_schema db,table_name old_tblname,substr(table_name,4) FROM information_schema.tables WHERE SUBSTR(table_name,1,3)='dr_') A" > BigRename.sql
mysql -u... -p... < BigRename.sql
Run Code Online (Sandbox Code Playgroud)