可以将文章内容翻译成中文,广告屏蔽插件可能会导致该功能失效(如失效,请关闭广告屏蔽插件后再试):
问题:
This DROP TABLE IF EXISTS
works, too bad that RENAME TABLE IF EXISTS
doesn't work.
Can anyone suggest a solution for this query?
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
query:
RENAME TABLE IF EXISTS video_top_day TO video_top_day_for_delete
回答1:
I've managed to execute a code that always works and generates no errors when the table doesn't exist:
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;
When you don't want to replace [DATABASE NAME]
manually you can use the following variable
SELECT DATABASE() INTO @db_name FROM DUAL;
回答2:
First create table IF NOT EXISTS
. Then RENAME
it, so it will always exist!
Otherwise, rename the table, and if it doesn't exist just handle the error.
It is obvious, but it works.
回答3:
There's no official solution yet. There has been feature request submitted in 2004, never closed
回答4:
create table table2 like table1; insert into table2 select * from table1; drop table table1;
回答5:
If you are familiar with PL/SQL, then you can check for existence of table by querying information_schema.columns and based on this perform rename
回答6:
rename table oldtablename to newtablename