mysql - 如果目标表不存在,则重命名表

标签 mysql sql

我使用旧系统,并且有多个批处理相继执行。在每个批处理中都应该重命名一个表,尽管此重命名应该只发生一次。

所以,可能有:

RENAME TABLE oldName TO newName

在批处理 1 和批处理 2 中。然而,在batch2中最好忽略这条语句。当然,如果只记住该语句是否已执行会更干净,但这种干净的解决方案在当前的代码库中几乎是不可能的。

所以,我想要一个 MySQL 解决方案,基本上是这样的:如果表 newName 不存在,则执行重命名命令。否则,不执行任何操作,也不发送错误消息。

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

最佳答案

这个问题已经得到解答...

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;

当您不想手动替换[数据库名称]时,可以使用以下变量

SELECT DATABASE() INTO @db_name FROM DUAL;

关于mysql - 如果目标表不存在,则重命名表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35800153/

相关文章:

动态按用户id和日期范围sql分组查询结果

c# - LINQ to Entities 无法识别方法 'Double Parse(System.String)' 无法转换为存储表达式 C# asp.net

java - 如何在最短的时间内从大量文件/子文件夹中取出子文件夹中的所有重复文件?

mysql - 连接 2 个 MySQL 临时表比连接临时表和普通表并添加 WHERE 子句慢 50 倍?

sql - 使用数据库/sql时如何获取返回的行数?

MySQL 错误 1005 : Foreign key constraint is incorrectly formed

php - mysql PHP 自动递增列

php - "Like"系统php/mysql

php - 简单的照片分享网站 : How to structure the MySQL database for multiple users and their photos

mysql - varbinary(-1) 上的语法错误