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). | +------------------------------------------------------------+