

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

# 使用者定義的類型 (UDTs)
<a name="cql.ddl.type"></a>

*UDT* – 欄位和資料類型的分組，可用於在 Amazon Keyspaces 中定義單一資料欄。UDTs 的有效資料類型都是支援的 Cassandra 資料類型，包括您已在相同金鑰空間中建立的集合和其他 UDTs。如需支援的 Cassandra 資料類型的詳細資訊，請參閱 [Cassandra 資料類型支援](cassandra-apis.md#cassandra-data-type)。

```
user_defined_type::= udt_name
udt_name::= [ keyspace_name '.' ] identifier
```

**Topics**
+ [CREATE TYPE](#cql.ddl.type.create)
+ [DROP TYPE](#cql.ddl.type.drop)

## CREATE TYPE
<a name="cql.ddl.type.create"></a>

使用 `CREATE TYPE`陳述式來建立新的類型。

 **語法**

```
create_type_statement ::=  CREATE TYPE [ IF NOT EXISTS ] udt_name
    '('field_definition ( ',' field_definition)* ')'
            field_definition::= identifier cql_type
```

其中：
+ `IF NOT EXISTS` 如果類型已存在， 會`CREATE TYPE`防止 失敗。(選用)
+ `udt_name` 是類型格式 UDT 的完整名稱，例如 `my_keyspace.my_type`。如果您使用 `USE`陳述式定義目前的金鑰空間，則不需要指定金鑰空間名稱。
+ `field_definition` 包含名稱和類型。

下表顯示允許的 UDT 名稱範例。第一欄顯示如何在建立 類型時輸入名稱，第二欄顯示 Amazon Keyspaces 如何在內部格式化名稱。Amazon Keyspaces 預期 等操作的格式化名稱`GetType`。


| 輸入的名稱 | 格式化名稱 | 注意 | 
| --- | --- | --- | 
|  MY\$1UDT  | my\$1udt | 如果沒有雙引號，Amazon Keyspaces 會將所有大寫字元轉換為小寫。 | 
|  "MY\$1UDT"  | MY\$1UDT | 使用雙引號時，Amazon Keyspaces 會遵守大寫字元，並從格式化名稱中移除雙引號。 | 
|  "1234"  | 1234 | 使用雙引號時，名稱可以以數字開頭，Amazon Keyspaces 會從格式化的名稱中移除雙引號。 | 
|  "Special\$1Ch@r@cters<>\$1\$1"  | Special\$1Ch@r@cters<>\$1\$1 | 使用雙引號時，名稱可以包含特殊字元，Amazon Keyspaces 會從格式化的名稱中移除雙引號。 | 
|  "nested""""""quotes"  | nested"""quotes | Amazon Keyspaces 會從格式化名稱中移除外部雙引號和逸出雙引號。 | 

**範例**

```
CREATE TYPE my_keyspace.phone (
    country_code int,
    number text
);
```

如果巢狀 UDTs 凍結，您可以巢狀 UDT。如需 類型預設值和配額的詳細資訊，請參閱 [Amazon Keyspaces UDT 配額和預設值](quotas.md#udt-table)。

```
CREATE TYPE my_keyspace.user (
    first_name text,
    last_name text,
    phones FROZEN<phone>
);
```

如需示範如何建立 UDTs更多程式碼範例，請參閱 [Amazon Keyspaces 中使用者定義的類型 (UDT)](udts.md)。

## DROP TYPE
<a name="cql.ddl.type.drop"></a>

使用 `DROP TYPE`陳述式刪除 UDT。您只能刪除其他類型或資料表未使用的類型。

 **語法**

```
drop_type_statement ::=  DROP TYPE [ IF EXISTS ] udt_name
```

其中：
+ `IF EXISTS` 如果類型不存在， 會`DROP TYPE`防止 失敗。(選用)
+ `udt_name` 是類型格式 UDT 的完整名稱，例如 `my_keyspace.my_type`。如果您使用 `USE`陳述式定義目前的金鑰空間，則不需要指定金鑰空間名稱。

**範例**

```
DROP TYPE udt_name;
```