2012-02-14 21 views
16

Este DROP TABLE IF EXISTS funciona, lástima que RENAME TABLE IF EXISTS no funciona.Mysql: RENAME TABLE IF EXISTS

¿Alguien puede sugerir una solución para esta consulta?

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 

consulta:

RENAME TABLE IF EXISTS video_top_day TO video_top_day_for_delete 
+0

¿Olvidaste publicar la consulta? – Schiavini

+0

¿En qué versión del servidor Mysql está involucrado? ¿Cuál es el mensaje/código de error? – rkosegi

+0

versión de mysql es 5.5.8 – Somebody

Respuesta

29

he conseguido ejecutar un código que siempre funciona y no genera errores cuando no existe la tabla:

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; 

cuando no se desea reemplazar manualmente [DATABASE NAME] puede utilizar la siguiente variable

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

Utilizaré un enfoque similar. +1 – rkosegi

+1

Algoritmo pulido, +1 !!! – RolandoMySQLDBA

+1

Cambió el propietario de la respuesta. – Somebody

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

Deja un comentario cuando downvote – matino

+1

esto no resuelve el problema. ¿y si la tabla 1 no existe? ¡también está copiando una tabla entera en otra simplemente para cambiar su nombre! – vulkanino

+0

Cambie 'CREATE TABLE' por' CREATE TABLE IF NOT EXISTS' y tenga una solución justa. –

9

No hay solución oficial. Ha habido feature request enviado en 2004, nunca cerrado

+0

Gracias amigo, así que supongo que tendré que ejecutar otra consulta antes de cambiar el nombre MOSTRAR TABLAS COMO 'video_top_day'. Aceptaré tu respuesta pronto. – Somebody

9

Primero cree la tabla IF NOT EXISTS. Entonces RENAME, ¡así que siempre existirá!

De lo contrario, cambie el nombre de la tabla, y si no existe, simplemente maneje el error.

Es obvio, pero funciona.

+0

No usaría SI NO EXISTE. : D Mate, eres como el Capitán Obvio. – Somebody

+0

Crearé mejor otra consulta en una cadena, para verificar si existe dicha tabla. Pero el error de manejo también funcionará. Hmm, tal vez incluso mejor que consultar, puedo saltar a la siguiente secuencia de cadena. – Somebody

0

Si está familiarizado con PL/SQL, a continuación, se puede comprobar la existencia de la mesa mediante la consulta INFORMATION_SCHEMA.COLUMNS y en base a este cambio el nombre a realizar

-2

cambiar el nombre de la tabla oldtablename a newtablename