有没有一种简单的方法可以在程序中重命名 table?

Is there a easy way to rename a table in procedure?

我正在使用 MariaDB 10.1 SQLyog 11.5

我使用以下查询重命名了 table。

ALTER TABLE old_name RENAME new_name

但是有很多存储过程引用了'old_name'。我打开了所有 SP 创建查询并进行了更改。因为我不知道哪个SP有引用old_name table.

的查询

有没有办法知道哪个 SP 有引用 old_name table 的查询?

通过这个INFORMATION_SCHEMA.ROUTINES你可以获取存储过程中可用的文本

请尝试此查询:(未验证)

SELECT ROUTINE_NAME
FROM INFORMATION_SCHEMA.ROUTINES
WHERE ROUTINE_DEFINITION LIKE '%old_name%'
      -- AND ROUTINE_TYPE = "PROCEDURE" -- Filter only if need SPs
ORDER BY ROUTINE_NAME;

引用自此page

你可以这样做:

创建重命名查询

SELECT  CONCAT ('RENAME TABLE ',
  GROUP_CONCAT(t.TABLE_SCHEMA,'.',t.TABLE_NAME,' TO ', t.TABLE_SCHEMA,'.',REPLACE(t.TABLE_NAME,'old','NEW') SEPARATOR ' , ') 
) INTO @sql
FROM information_schema.TABLES t
WHERE t.TABLE_TYPE = 'BASE TABLE'
AND t.TABLE_SCHEMA IN ('SCHEMA1','SCHEMA2')
AND t.TABLE_NAME LIKE 'old_table%';

仅用于验证

SELECT @sql;

准备并执行

PREPARE stmt FROM @SQL;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;