本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
DROP TABLE
從資料庫移除資料表。
如果您嘗試清空資料列資料表,而不移除資料表,請使用 DELETE或 TRUNCATE命令。
DROP TABLE 移除目標資料表上存在的限制。可以使用單一DROPTABLE命令移除多個資料表。
DROP TABLE 無法在交易 (BEGIN ... ) 內執行具有外部資料表的 END。如需交易的相關資訊,請參閱 可序列化隔離。
若要尋找將DROP權限授予群組的範例,請參閱 GRANT 範例。
所需權限
以下是 DROP 的必要權限TABLE:
超級使用者
具有 DROPTABLE權限的使用者
具有結構描述上USAGE權限的資料表擁有者
語法
DROP TABLE [ IF EXISTS ] name [, ...] [ CASCADE | RESTRICT ]
參數
- IF EXISTS
-
此子句會指出,若指定的資料表不存在,則命令不應進行任何變更,且應傳回資料表不存在的訊息,而不是在發生錯誤的情況下終止。
此子句在指令碼時很有用,因此如果對不存在的資料表DROPTABLE執行 ,指令碼不會失敗。
- name
-
要捨棄的資料表名稱。
- CASCADE
-
此子句指出,自動捨棄取決於資料表的物件,例如檢視。
若要建立不依賴於其他資料庫物件的檢視,例如檢視和資料表,請在檢視定義中包含 WITH NO SCHEMABINDING子句。如需詳細資訊,請參閱CREATE VIEW。
- RESTRICT
-
此子句指出,若有任何物件相依於資料表,則不捨棄資料表。這是預設動作。
範例
丟棄無相依性的資料表
下列範例會建立和捨棄名為 的資料表FEEDBACK,該資料表沒有相依性:
create table feedback(a int); drop table feedback;
若資料表包含的資料欄為檢視或其他資料表所參考,Amazon Redshift 會顯示以下訊息。
Invalid operation: cannot drop table feedback because other objects depend on it
同步丟棄兩個資料表
下列命令集會建立FEEDBACK資料表和BUYERS資料表,然後使用單一命令捨棄兩個資料表:
create table feedback(a int); create table buyers(a int); drop table feedback, buyers;
丟棄具有相依性的資料表
下列步驟說明如何捨棄FEEDBACK使用CASCADE交換機呼叫的資料表。
首先,FEEDBACK使用 CREATETABLE命令建立名為 的簡單資料表:
create table feedback(a int);
接下來,使用 CREATEVIEW命令來建立名為 FEEDBACK_VIEW 的檢視,該檢視依賴資料表 FEEDBACK:
create view feedback_view as select * from feedback;
下列範例會捨棄資料表FEEDBACK,也會捨棄檢視 FEEDBACK_VIEW,因為 FEEDBACK_VIEW 取決於資料表 FEEDBACK:
drop table feedback cascade;
檢視資料表的相依性
若要傳回資料表的相依性,請使用下列範例。Replace (取代) my_schema
以及 my_table
使用您自己的結構描述和資料表。
SELECT dependent_ns.nspname as dependent_schema , dependent_view.relname as dependent_view , source_ns.nspname as source_schema , source_table.relname as source_table , pg_attribute.attname as column_name FROM pg_depend JOIN pg_rewrite ON pg_depend.objid = pg_rewrite.oid JOIN pg_class as dependent_view ON pg_rewrite.ev_class = dependent_view.oid JOIN pg_class as source_table ON pg_depend.refobjid = source_table.oid JOIN pg_attribute ON pg_depend.refobjid = pg_attribute.attrelid AND pg_depend.refobjsubid = pg_attribute.attnum JOIN pg_namespace dependent_ns ON dependent_ns.oid = dependent_view.relnamespace JOIN pg_namespace source_ns ON source_ns.oid = source_table.relnamespace WHERE source_ns.nspname = 'my_schema' AND source_table.relname = 'my_table' AND pg_attribute.attnum > 0 ORDER BY 1,2 LIMIT 10;
若要捨棄 my_table
及其相依性,請使用下列範例。此範例也會傳回已捨棄資料表的所有相依性。
DROP TABLE my_table CASCADE; SELECT dependent_ns.nspname as dependent_schema , dependent_view.relname as dependent_view , source_ns.nspname as source_schema , source_table.relname as source_table , pg_attribute.attname as column_name FROM pg_depend JOIN pg_rewrite ON pg_depend.objid = pg_rewrite.oid JOIN pg_class as dependent_view ON pg_rewrite.ev_class = dependent_view.oid JOIN pg_class as source_table ON pg_depend.refobjid = source_table.oid JOIN pg_attribute ON pg_depend.refobjid = pg_attribute.attrelid AND pg_depend.refobjsubid = pg_attribute.attnum JOIN pg_namespace dependent_ns ON dependent_ns.oid = dependent_view.relnamespace JOIN pg_namespace source_ns ON source_ns.oid = source_table.relnamespace WHERE source_ns.nspname = 'my_schema' AND source_table.relname = 'my_table' AND pg_attribute.attnum > 0 ORDER BY 1,2 LIMIT 10;
+------------------+----------------+---------------+--------------+-------------+ | dependent_schema | dependent_view | source_schema | source_table | column_name | +------------------+----------------+---------------+--------------+-------------+
使用 IF 捨棄資料表 EXISTS
下列範例會在FEEDBACK資料表存在時捨棄資料表,或者如果資料表不存在,則不會執行任何動作,如果資料表不存在,則傳回訊息:
drop table if exists feedback;