可以将文章内容翻译成中文,广告屏蔽插件可能会导致该功能失效(如失效,请关闭广告屏蔽插件后再试):
问题:
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