

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 用户定义的类型 (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 Keys UDTs paces 中的用户定义类型 ()](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;
```