드롭 대 기존 드롭 대?


163

누군가 사이에 차이가 있는지 말해 줄 수 있습니까?

DROP IF EXISTS [TABLE_NAME]
DROP [TABLE_NAME]

내 MVC 웹 응용 프로그램에서 JDBC 템플릿을 사용하고 있기 때문에 이것을 묻습니다. 내가 DROP [TABLE_NAME]오류를 사용 하면 테이블이 존재한다고 말했다. 그리고 그것을 사용 DROP IF EXISTS [TABLE_NAME]하면 나쁜 SQL 문법이 나타납니다. 도움이 될까요?


1
SQL Server 문법을 찾고 있다면 여기 있습니다 : stackoverflow.com/questions/7887011/…
Drew Delano

특정 데이터베이스에 대한 질문에 태그가 있어야한다고 생각합니다.
Tom Stickel

답변:


293

표준 SQL 구문은

DROP TABLE table_name;

IF EXISTS표준이 아닙니다. 다른 플랫폼은 다른 구문으로 지원하거나 전혀 지원하지 않을 수 있습니다. PostgreSQL에서 구문은 다음과 같습니다.

DROP TABLE IF EXISTS table_name;

첫 번째는 테이블이 존재하지 않거나 다른 데이터베이스 객체가 테이블에 의존하면 오류를 발생시킵니다. 대부분의 경우 다른 데이터베이스 개체는 외래 키 참조이지만 다른 데이터베이스 개체도있을 수 있습니다. (예를 들어,보기) 두 번째는 테이블이 존재하지 않으면 오류를 발생시키지 않지만 다른 데이터베이스 개체가 테이블에 의존하는 경우 여전히 오류를 발생시킵니다.

테이블 및 테이블에 종속 된 다른 모든 개체를 삭제하려면 다음 중 하나를 사용하십시오.

DROP TABLE table_name CASCADE;
DROP TABLE IF EXISTS table_name CASCADE;

주의해서 CASCADE를 사용하십시오.


6
트랜잭션 블록 ( ... ) 내 에서 사용 하는 것이 정말 좋은 아이디어 라고 언급했습니다 . 이렇게하면 원하지 않는 많은 데이터를 잠재적으로 클로버 하기 전에 데이터베이스가 어떻게 영향을 받는지 알 수 있습니다. CASCADEBEGINCOMMIT
jbowman

3
CASPADE가없는 DROP IF EXISTS도 SQL Server 2016에 추가되었습니다. blogs.msdn.com/b/sqlserverstorageengine/archive/2015/11/03/…
Jovan MSFT

35

직접 묻는 것은 아닙니다. 그러나 테이블을 올바르게 삭제하는 방법을 찾고 다른 많은 사람들이 생각하는 것처럼이 질문을 우연히 발견했습니다.

SQL Server 2016 이상에서 사용할 수 있습니다

DROP TABLE IF EXISTS dbo.Table

SQL Server <2016의 경우 영구 테이블에 대해 다음을 수행합니다.

IF OBJECT_ID('dbo.Table', 'U') IS NOT NULL 
  DROP TABLE dbo.Table; 

또는 이것은 임시 테이블의 경우

IF OBJECT_ID('tempdb.dbo.#T', 'U') IS NOT NULL
  DROP TABLE #T; 

17

table구문에서를 잊어 버렸습니다 .

drop table [table_name]

테이블을 삭제합니다.

사용

drop table if exists [table_name]

테이블을 삭제하기 전에 테이블이 존재하는지 확인합니다.
존재하면 삭제됩니다.
그렇지 않으면 오류가 발생하지 않으며 조치가 수행되지 않습니다.


4
DROP TABLE IF EXISTS [table_name]

먼저 테이블이 존재하는지 확인하고 존재하는 경우 테이블을 삭제합니다.

DROP TABLE [table_name]

확인하지 않고 삭제하므로 존재하지 않으면 오류와 함께 종료됩니다.


3

해당 이름의 테이블이 없으면 DROP오류가 발생하면서 실패합니다.DROP IF EXISTS 하지 않으면 아무 것도하지 않고 .

스크립트를 사용하여 데이터베이스를 작성 / 수정할 때 유용합니다. 이렇게하면 이전 버전의 테이블이 삭제되도록 수동으로 확인할 필요가 없습니다. 당신은 단지DROP IF EXISTS 하고 잊어 버려요.

물론 현재 DB 엔진이이 옵션을 지원하지 않을 수 있습니다. 제공 한 정보의 오류에 대해 더 자세히 설명하기는 어렵습니다.


시도 할 drop some_table if exists;때 테이블 some_table이 존재하지 않으면 일부 RDBMS (특히 PostgreSQL)에서 경고가 발생한다고 언급 할 가치가 있습니다.

아, 물론 juegen d와 Flakron이 옳습니다. DROP개체 유형을 지정해야합니다 ( TABLE이 경우)
SJuan76
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.