2012-02-14 16 views
16

Questo DROP TABLE IF EXISTS funziona, peccato che RENAME TABLE IF EXISTS non funzioni.Mysql: RENAME TABLE IF EXISTS

Qualcuno può suggerire una soluzione per questa 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 
+0

Hai dimenticato di pubblicare la query? – Schiavini

+0

In quale versione del server Mysql è coinvolta? Qual è il messaggio/codice di errore? – rkosegi

+0

versione di mysql è 5.5.8 – Somebody

risposta

29

Sono riuscito a eseguire un codice che funziona sempre e non genera quando la tabella non esiste errori:

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; 

quando non si desidera sostituire [DATABASE NAME] manualmente è possibile utilizzare la seguente variabile

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

Userò un approccio simile. +1 – rkosegi

+1

Algoritmo slick, +1 !!! – RolandoMySQLDBA

+1

Proprietario della risposta modificata. – Somebody

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

Lascia un commento quando si downvote – matino

+1

questo non risolve il problema. cosa succede se table1 non esiste? inoltre, stai copiando un intero tavolo in un altro solo per cambiare il suo nome! – vulkanino

+0

Cambia 'CREATE TABLE' in' CREATE TABLE SE NOT EXISTS' e hai una soluzione equa. –

9

Non c'è ancora una soluzione ufficiale. È stato inviato feature request nel 2004, non è mai stato chiuso

+0

Grazie amico, quindi suppongo che dovrò eseguire un'altra query prima di rinominare SHOW TABLES LIKE 'video_top_day'. Accetterò presto la tua risposta. – Somebody

9

Prima creazione tabella IF NOT EXISTS. Quindi lo RENAME, quindi esisterà sempre!

Altrimenti, rinomina la tabella e, se non esiste, gestisci l'errore.

È ovvio, ma funziona.

+0

Non vorrei usare SE NON ESISTE. : D Mate, sei come Captain Obviousness. – Somebody

+0

Sarà meglio creare un'altra query in una catena, per verificare se tale tabella esiste. Ma anche l'errore di gestione funzionerà. Hmm forse anche meglio del controllo, posso saltare alla sequenza successiva. – Somebody

0

Se sei a conoscenza PL/SQL, allora si può verificare per l'esistenza del tavolo interrogando INFORMATION_SCHEMA.COLUMNS e sulla base di questo eseguire rinominare

-2

rinomina tabella oldtablename in newtablename