2012-02-14 93 views
16

DROP TABLE IF EXISTS的作品,太糟糕了,RENAME TABLE IF EXISTS不起作用。Mysql:重命名表如果存在

任何人都可以提出这个查询的解决方案吗?

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 

查询:

RENAME TABLE IF EXISTS video_top_day TO video_top_day_for_delete 
+0

您是否忘记发布查询? – Schiavini 2012-02-14 15:33:06

+0

涉及哪个版本的Mysql服务器?什么是错误信息/代码? – rkosegi 2012-02-14 15:33:20

+0

版本的mysql是5.5.8 – Somebody 2012-02-14 15:37:05

回答

29

我已经成功地执行永远奏效,不生成代码当表中不存在错误:

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; 

当你不希望替换[DATABASE NAME]手动您可以使用以下变量

SELECT DATABASE() INTO @db_name FROM DUAL; 
+1

我会用类似的方法。 +1 – rkosegi 2012-02-14 15:55:42

+1

流畅的算法,+1! – RolandoMySQLDBA 2012-02-14 16:01:37

+1

更改了答案所有者。 – Somebody 2014-12-17 14:12:55

2
create table table2 like table1; 
insert into table2 select * from table1; 
drop table table1; 
+1

发表评论当你downvote – matino 2012-02-14 15:35:38

+1

这并不能解决问题。如果table1不存在?另外,您正在将整个表格复制到另一个表格中以更改其名称! – vulkanino 2012-02-14 15:48:43

+0

将'CREATE TABLE'更改为'CREATE TABLE IF NOT EXISTS',并且您有一个公平的解决方案。 – 2012-02-14 15:59:03

9

有没有官方的解决办法呢。在2004年提交feature request,从未关闭

+0

感谢队友,所以我想我必须在重命名SHOW TABLES LIKE'video_top_day'之前执行另一个查询。我很快就会接受你的回答。 – Somebody 2012-02-14 15:38:55

9

首先创建表IF NOT EXISTS。那么RENAME吧,所以它永远存在!

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

这很明显,但它的工作原理。

+0

我不会使用IF NOT EXISTS。 :D Mate你就像上尉明显。 – Somebody 2012-02-14 15:36:28

+0

我会更好地在链中创建另一个查询,以检查这样的表是否存在。但处理错误也会起作用。嗯,甚至比检查更好,我可以跳到下一个连锁序列。 – Somebody 2012-02-14 15:41:49

0

如果您熟悉PL/SQL,那么你可以通过查询INFORMATION_SCHEMA.COLUMNS检查表的存在,并在此基础上进行重命名

-2

将表oldtablename重命名为newtablename