

 Amazon Redshift 將不再支援從修補程式 198 開始建立新的 Python UDFs。現有 Python UDF 將繼續正常運作至 2026 年 6 月 30 日。如需詳細資訊，請參閱[部落格文章](https://aws.amazon.com/blogs/big-data/amazon-redshift-python-user-defined-functions-will-reach-end-of-support-after-june-30-2026/)。

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# DROP TABLE
<a name="r_DROP_TABLE"></a>

從資料庫移除資料表。

如果您要嘗試清空資料表中的資料列，但不移除資料表，請使用 DELETE 或 TRUNCATE 命令。

DROP TABLE 會移除目標資料表上存在的限制條件。使用單一 DROP TABLE 命令即可移除多個資料表。

您無法在交易內 (BEGIN … END) 對外部資料表執行 DROP TABLE。如需交易的相關資訊，請參閱 [Amazon Redshift 中的隔離層級](c_serial_isolation.md)。

若要尋找將 DROP 權限授予群組的範例，請參閱 GRANT [範例](r_GRANT-examples.md)。

## 所需權限
<a name="r_DROP_TABLE-privileges"></a>

以下是 DROP TABLE 所需的權限：
+ 超級使用者
+ 具有 DROP TABLE 權限的使用者
+ 具有結構描述的 USAGE 權限的資料表擁有者

## 語法
<a name="r_DROP_TABLE-synopsis"></a>

```
DROP TABLE [ IF EXISTS ] name [, ...] [ CASCADE | RESTRICT ]
```

## Parameters
<a name="r_DROP_TABLE-parameters"></a>

IF EXISTS  
此子句會指出，若指定的資料表不存在，則命令不應進行任何變更，且應傳回資料表不存在的訊息，而不是在發生錯誤的情況下終止。  
此子句在編寫指令碼時很實用，如此指令碼就不會因為 DROP TABLE 對不存在的資料表執行而失敗。

 *name*   
要捨棄的資料表名稱。

CASCADE  
此子句指出，自動捨棄取決於資料表的物件，例如檢視。  
若要建立不相依於其他資料庫物件的檢視，例如檢視和資料表，請在檢視定義中包含 WITH NO SCHEMA BINDING 子句。如需詳細資訊，請參閱[CREATE VIEW](r_CREATE_VIEW.md)。

RESTRICT   
此子句指出，若有任何物件相依於資料表，則不捨棄資料表。這是預設動作。

## 範例
<a name="r_DROP_TABLE-examples"></a>

 **丟棄無相依性的資料表** 

以下範例會建立並捨棄名為 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;
```

 **丟棄具有相依性的資料表** 

以下步驟顯示如何使用 CASCADE 參數捨棄名為 FEEDBACK 的資料表。

首先，使用 CREATE TABLE 命令建立名為 FEEDBACK 的簡單資料表：

```
create table feedback(a int);
```

 接著使用 CREATE VIEW 命令建立名為 FEEDBACK\$1VIEW 的檢視，此檢視相依於 FEEDBACK 資料表：

```
create view feedback_view as select * from feedback;
```

 以下範例會捨棄 FEEDBACK 資料表，並且也會捨棄 FEEDBACK\$1VIEW 檢視，因為 FEEDBACK\$1VIEW 相依於 FEEDBACK 資料表：

```
drop table feedback cascade;
```

 **檢視資料表的相依性** 

若要傳回資料表的相依性，請使用下列範例。將 *my\$1schema* 和 *my\$1table* 取代為您自己的結構描述和資料表。

```
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\$1table* 及其相依性，請使用以下範例。此範例也會傳回已捨棄資料表的所有相依性。

```
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;
```