DROP TABLE¶
현재/지정된 스키마에서 테이블을 제거하지만, UNDROP TABLE 을 사용하여 복구할 수 있도록 테이블 버전을 유지합니다. 자세한 내용은 사용법 노트 를 참조하세요.
- 참고 항목:
- CREATE TABLE , ALTER TABLE , SHOW TABLES , TRUNCATE TABLE , DESCRIBE TABLE 
구문¶
DROP TABLE [ IF EXISTS ] <name> [ CASCADE | RESTRICT ]
매개 변수¶
- name
- 삭제할 테이블의 식별자를 지정합니다. 식별자에 공백, 특수 문자 또는 대소문자가 혼합된 문자가 포함된 경우 전체 문자열을 큰따옴표로 묶어야 합니다. 큰따옴표로 묶인 식별자도 대소문자를 구분합니다(예: - "My Object").- 테이블 식별자가 ( - db_name.schema_name.table_name또는- schema_name.table_name형식으로) 정규화되지 않은 경우 이 명령은 세션의 현재 스키마에서 테이블을 찾습니다.
- CASCADE | RESTRICT
- 테이블을 참조하는 외래 키가 있는 경우 테이블을 삭제할 수 있는지 여부를 지정합니다. - CASCADE: 테이블에 다른 테이블의 외래 키가 참조하는 기본 또는 고유 키가 있더라도 테이블을 삭제합니다. 
- RESTRICT: 기존 외래 키 참조에 대한 경고를 반환하고 테이블을 삭제하지 않습니다. 
 - 기본값: 표준 테이블의 경우 CASCADE이고, 하이브리드 테이블의 경우 RESTRICT입니다. 하이브리드 테이블 삭제 도 참조하십시오. 
액세스 제어 요구 사항¶
이 작업을 실행하는 데 사용되는 역할 에는 최소한 다음 권한 이 있어야 합니다.
| 권한 | 오브젝트 | 참고 | 
|---|---|---|
| OWNERSHIP | 테이블 | OWNERSHIP is a special privilege on an object that is automatically granted to the role that created the object, but can also be transferred using the GRANT OWNERSHIP command to a different role by the owning role (or any role with the MANAGE GRANTS privilege). | 
지정된 권한 세트로 사용자 지정 역할을 만드는 방법에 대한 지침은 사용자 지정 역할 만들기 섹션을 참조하십시오.
보안 오브젝트 에 대해 SQL 작업을 수행하기 위한 역할과 권한 부여에 대한 일반적인 정보는 액세스 제어의 개요 섹션을 참조하십시오.
사용법 노트¶
- 테이블을 삭제해도 시스템에서 영구적으로 제거되지는 않습니다. 삭제된 테이블의 버전은 테이블에 대한 데이터 보존 기간 으로 지정된 일수 동안 Time Travel 에 보존됩니다. - Time Travel 보존 기간 내에 UNDROP TABLE 명령을 사용하여 삭제된 테이블을 복원할 수 있습니다. 
- 테이블을 삭제한 *후*에 계정 또는 상위 오브젝트(데이터베이스 또는 스키마)의 Time Travel 보존 기간을 변경해도 삭제된 테이블의 Time Travel 보존 기간은 변경되지 않습니다. 자세한 내용은 Time Travel 항목의 참고 사항 을 참조하세요. 
- Time Travel 보존 기간이 끝날 때, 삭제된 테이블의 다음 상태는 이 스키마가 영구적, 일시적 또는 임시적인지에 따라 달라집니다. - 영구 테이블은 Fail-safe 로 이동합니다. Fail-safe(7일)에서는 삭제된 테이블을 복구할 수 있지만, Snowflake에서만 가능합니다. 테이블이 Fail-safe 상태를 벗어나면 제거됩니다. 
- 일시적 테이블 또는 임시 테이블은 Fail-safe가 없으므로, Time Travel에서 벗어날 때 제거됩니다. - 참고 - 시간이 오래 걸리는 Time Travel 쿼리는 해당 쿼리가 완료될 때까지 계정 내 모든 데이터 및 오브젝트(테이블, 스키마, 데이터베이스)의 Fail-safe 전환을 지연시킵니다. 임시 테이블 및 일시적 테이블의 삭제도 동일한 방식으로 지연됩니다. 
- 삭제된 테이블이 정리된 후에는 복구할 수 없으며, 다시 만들어야 합니다. 
 
 
- 테이블을 삭제한 후 동일한 이름으로 테이블을 만들면 새 버전의 테이블이 생성됩니다. 다음 단계를 따라 이전 테이블의 삭제된 버전을 복원할 수 있습니다. - 현재 버전의 테이블 이름을 바꿉니다. 
- UNDROP TABLE 명령을 사용하여 테이블의 이전 버전을 복원합니다. 
 
- 테이블을 삭제하기 전에 해당 테이블을 참조하는 뷰가 없는지 확인합니다. 뷰에서 참조하는 테이블을 삭제하면 뷰가 무효화됩니다(즉, 뷰를 쿼리하면 “object does not exist” 오류가 반환됨). 
- 테이블을 삭제하려면 테이블에 대한 OWNERSHIP 권한이 있는 역할을 사용해야 합니다. 
- IF EXISTS 절이 지정되고 대상 오브젝트가 존재하지 않는 경우 이 명령은 오류를 반환하지 않고 성공적으로 완료됩니다. 
하이브리드 테이블 삭제¶
RESTRICT 또는 CASCADE 옵션을 지정하지 않고 하이브리드 테이블을 삭제하고 하이브리드 테이블이 다른 테이블과 기본 키/외래 키 또는 고유 키/외래 키 관계를 갖는 경우 DROP TABLE 명령이 오류와 함께 실패합니다. 기본 동작은 RESTRICT입니다.
예:
CREATE OR REPLACE HYBRID TABLE ht1(
  col1 NUMBER(38,0) NOT NULL,
  col2 NUMBER(38,0) NOT NULL,
  CONSTRAINT pkey_ht1 PRIMARY KEY (col1, col2));
CREATE OR REPLACE HYBRID TABLE ht2(
  cola NUMBER(38,0) NOT NULL,
  colb NUMBER(38,0) NOT NULL,
  colc NUMBER(38,0) NOT NULL,
  CONSTRAINT pkey_ht2 PRIMARY KEY (cola),
  CONSTRAINT fkey_ht1 FOREIGN KEY (colb, colc) REFERENCES ht1(col1,col2));
DROP TABLE ht1;
SQL compilation error:
Cannot drop the table because of dependencies
이 경우 DROP TABLE 명령은 실패합니다. 필요한 경우 DROP TABLE 명령에 CASCADE 를 지정하여 기본 동작을 재정의할 수 있습니다.
DROP TABLE ht1 CASCADE;
또는 이 경우 종속성 테이블 ht2 를 먼저 삭제한 다음 테이블 ht1 을 삭제할 수 있습니다.
예¶
테이블 삭제하기:
SHOW TABLES LIKE 't2%'; +---------------------------------+------+---------------+-------------+-----------+------------+------------+------+-------+--------------+----------------+ | created_on | name | database_name | schema_name | kind | comment | cluster_by | rows | bytes | owner | retention_time | |---------------------------------+------+---------------+-------------+-----------+------------+------------+------+-------+--------------+----------------+ | Tue, 17 Mar 2015 16:48:16 -0700 | T2 | TESTDB | PUBLIC | TABLE | | | 5 | 4096 | PUBLIC | 1 | +---------------------------------+------+---------------+-------------+-----------+------------+------------+------+-------+--------------+----------------+ DROP TABLE t2; +--------------------------+ | status | |--------------------------| | T2 successfully dropped. | +--------------------------+ SHOW TABLES LIKE 't2%'; +------------+------+---------------+-------------+------+---------+------------+------+-------+-------+----------------+ | created_on | name | database_name | schema_name | kind | comment | cluster_by | rows | bytes | owner | retention_time | |------------+------+---------------+-------------+------+---------+------------+------+-------+-------+----------------| +------------+------+---------------+-------------+------+---------+------------+------+-------+-------+----------------+
테이블을 다시 삭제하되, 테이블이 없을 경우 오류를 발생시키지 않기:
DROP TABLE IF EXISTS t2; +------------------------------------------------------------+ | status | |------------------------------------------------------------| | Drop statement executed successfully (T2 already dropped). | +------------------------------------------------------------+