2012-02-14 4 views
16

DROP TABLE IF EXISTS은 작동하지 않으므로 RENAME TABLE IF EXISTS이 작동하지 않습니다.mysql : 존재하지 않는 테이블 이름 바꾸기

누구든지이 검색어에 대한 해결책을 제안 할 수 있습니까?

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

이름을 수행 할 수 있습니다 오류는 테이블이 존재하지 않는 경우 : 당신이 [DATABASE NAME]을 대체하지 않으려면

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; 

수동으로 사용할 수있는 다음과 같은 변수

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

때 의견을 남겨주세요이 문제가 해결되지 않습니다. table1이 없으면 어떻게 될까요? 또한 이름을 변경하기 위해 전체 테이블을 다른 테이블로 복사하는 중입니다. – vulkanino

+0

'CREATE TABLE'을'CREATE TABLE IF NOT EXISTS'로 변경하면 공정한 해결책이 생깁니다. –

9

아직 공식적인 해결책이 없습니다. 2004 년에 제출 된 feature request이 마감되었습니다.

+0

감사의 친구, 그래서 나는 '비디오 테이블의 날'처럼 이름을 변경하기 전에 다른 쿼리를 실행해야 할 것 같아요. 나는 곧 당신의 대답을 받아 들일 것입니다. – Somebody

9

처음으로 테이블 IF NOT EXISTS을 생성하십시오. 그럼 RENAME 그것, 그래서 항상 존재합니다!

테이블의 이름을 바꾸고 테이블 이름이 존재하지 않으면 오류를 처리하십시오.

분명하지만 작동합니다. 당신은 PL/SQL을 잘 알고있는 경우에, 당신은

+0

만약 존재하지 않는다면 나는 사용하지 않을 것입니다. : D 당신은 Captain Explviousness와 같습니다. – Somebody

+0

체인에 다른 쿼리를 만들어 해당 테이블이 있는지 확인하는 것이 좋습니다. 하지만 처리 오류도 작동합니다. 어쩌면 검사하는 것보다 더 좋을 수도 있습니다. 다음 체인 시퀀스로 건너 뛸 수 있습니다. – Somebody

0

INFORMATION_SCHEMA.COLUMNS를 쿼리하여 테이블의 존재를 확인하고이를 바탕은 항상 작동하고 어떤을 생성하는 코드를 실행하기 위해 관리했습니다

-2

테이블 이름을 newtablename으로 변경하십시오.

관련 문제