Mysql:RENAME TABLE IF EXISTS

Som*_*ody 20 mysql

DROP TABLE IF EXISTS工作太糟糕了,RENAME TABLE IF EXISTS不起作用.

有人可以建议这个查询的解决方案吗?

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'IF EXISTS video_top_day TO video_top_day_for_delete' at line 1
Run Code Online (Sandbox Code Playgroud)

查询:

RENAME TABLE IF EXISTS video_top_day TO video_top_day_for_delete
Run Code Online (Sandbox Code Playgroud)

Sch*_*ini 31

我设法执行一个始终有效的代码,当表不存在时不会产生任何错误:

SELECT Count(*)
INTO @exists
FROM information_schema.tables 
WHERE table_schema = [DATABASE_NAME]
    AND table_type = 'BASE TABLE'
    AND table_name = 'video_top_day';

SET @query = If(@exists>0,
    'RENAME TABLE video_top_day TO video_top_day_for_delete',
    'SELECT \'nothing to rename\' status');

PREPARE stmt FROM @query;

EXECUTE stmt;
Run Code Online (Sandbox Code Playgroud)

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

SELECT DATABASE() INTO @db_name FROM DUAL;
Run Code Online (Sandbox Code Playgroud)


Mar*_*in. 10

还没有正式的解决方案.2004年提交了功能请求,从未关闭


vul*_*ino 10

首先创建表IF NOT EXISTS.然后RENAME它,所以它将永远存在!

否则,重命名表,如果它不存在,则只处理错误.

很明显,但它确实有效.


Kar*_*l S 7

在您提出问题八年后,MariaDB 在版本 10.5.2 中添加了您想要的确切语法: https: //mariadb.com/kb/en/rename-table/

IF EXISTS
MariaDB 从 10.5.2 开始
如果使用此指令,如果要重命名的表不存在,则不会出现错误。

  • 这是 MariaDB 在 Oracle 在工作中打瞌睡后填补空缺的又一案例。 (3认同)