2012-02-14 1 views
16

Это DROP TABLE IF EXISTS работает, очень плохо, что RENAME TABLE IF EXISTS не работает.Mysql: RENAME TABLE IF EXESTS

Кому-нибудь предложит решение по этому запросу?

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

+0

Какая версия сервера Mysql задействована? Что такое сообщение об ошибке/код? – rkosegi

+0

версия mysql - это 5.5.8 – Somebody

ответ

29

мне удалось выполнить код, который всегда работает и генерирует NO ошибки, когда таблица не существует:

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

+1

Слайковый алгоритм, +1 !!! – RolandoMySQLDBA

+1

Изменен ответ владелец. – Somebody

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

Оставить комментарий, когда вы используете downvote – matino

+1

это не решит проблему. что, если таблица1 не существует? Кроме того, вы копируете всю таблицу в другую, просто чтобы изменить ее имя! – vulkanino

+0

Измените 'CREATE TABLE'' CREATE TABLE if NOT EXISTS', и у вас есть справедливое решение. –

9

Там нет официального решения пока нет. Был feature request, представленный в 2004 году, никогда не был закрыт

+0

Спасибо, я думаю, мне придется выполнить другой запрос перед переименованием SHOW TABLES LIKE 'video_top_day'. Я скоро приму ваш ответ. – Somebody

9

Сначала создайте стол IF NOT EXISTS. Тогда RENAME это, так оно всегда будет!

В противном случае переименуйте таблицу, и если она не существует, просто обработайте ошибку.

Это очевидно, но оно работает.

+0

Я бы не использовал ЕСЛИ НЕ СУЩЕСТВУЕТ. : D Mate, вы похожи на капитана. – Somebody

+0

Я лучше создам другой запрос в цепочке, чтобы проверить, существует ли такая таблица. Но ошибка обработки тоже будет работать. Хм, возможно, даже лучше, чем проверка, я могу перейти к следующей последовательности цепочек. – Somebody

0

Если вы знакомы с PL/SQL, то вы можете проверить существование таблицы, запрашивая INFORMATION_SCHEMA.COLUMNS и на этой основе выполнить переименование

Смежные вопросы