我使用遗留系统,并且有多个批次相互执行。在每个批次中都应该重命名一个表,尽管这个重命名应该只发生一次。
所以,可能会有:
RENAME TABLE oldName TO newName
在batch1和batch2中。但是,在batch2中,最好是忽略此语句。当然,如果语句已被执行,那么记住它会更加干净,但在当前代码库中这个干净的解决方案几乎是不可能的。
所以,我想要一个MySQL解决方案基本上说:如果表newName不存在,则执行rename命令。否则,什么也不做,也不发送错误信息。
这可能吗?如果是,怎么样?
答案 0 :(得分:1)
这已被回答......
使用以下代码...(所有归功于原作者)
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;