如果目标表不存在,则为RENAME表

时间:2016-03-04 15:45:41

标签: mysql sql

我使用遗留系统,并且有多个批次相互执行。在每个批次中都应该重命名一个表,尽管这个重命名应该只发生一次。

所以,可能会有:

RENAME TABLE oldName TO newName

在batch1和batch2中。但是,在batch2中,最好是忽略此语句。当然,如果语句已被执行,那么记住它会更加干净,但在当前代码库中这个干净的解决方案几乎是不可能的。

所以,我想要一个MySQL解决方案基本上说:如果表newName不存在,则执行rename命令。否则,什么也不做,也不发送错误信息。

这可能吗?如果是,怎么样?

1 个答案:

答案 0 :(得分:1)

这已被回答......

Mysql: RENAME TABLE IF EXISTS

使用以下代码...(所有归功于原作者)

SELECT Count(*)
INTO @exists
FROM information_schema.tables 
WHERE table_schema = [DATABASE_NAME]
AND table_type = 'BASE TABLE'
AND table_name = 'oldName';
SET @query = If(@exists=0,'RENAME TABLE oldName TO newName','SELECT \'nothing to rename\' status');
PREPARE stmt FROM @query;
EXECUTE stmt;

如果您不想手动替换[DATABASE NAME],可以使用以下变量

SELECT DATABASE() INTO @db_name FROM DUAL;