我使用旧系统,并且有多个批处理相继执行。在每个批处理中都应该重命名一个表,尽管此重命名应该只发生一次。
所以,可能有:
RENAME TABLE oldName TO newName
在批处理 1 和批处理 2 中。然而,在batch2中最好忽略这条语句。当然,如果只记住该语句是否已执行会更干净,但这种干净的解决方案在当前的代码库中几乎是不可能的。
所以,我想要一个 MySQL 解决方案,基本上是这样的:如果表 newName 不存在,则执行重命名命令。否则,不执行任何操作,也不发送错误消息。
这可能吗?如果是,怎么办?
最佳答案
这个问题已经得到解答...
使用以下代码...(全部归功于原作者)
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;
当您不想手动替换[数据库名称]时,可以使用以下变量
SELECT DATABASE() INTO @db_name FROM DUAL;
关于mysql - 如果目标表不存在,则重命名表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35800153/