首批通过分布式安全可靠测评,为关键业务系统打造
DDL
更新时间:2023-08-28 11:05:41
数据定义语言 DDL 语句用于定义、更改和删除 Schema 对象。
DDL 使您能够在不改变访问对象的应用程序的情况下更改对象的属性。例如,您可以向人力资源应用程序访问的表中添加列,而无需重写该应用程序。 当数据库用户在数据库中执行工作时,也可以使用 DDL 更改对象的结构。
更具体地说,DDL 语句使您能够完成如下操作:
创建、更改和删除 Schema 对象和其他数据库对象结构,包括数据库本身和数据库用户。大多数 DDL 语句以关键字
CREATE、ALTER或DROP开头。删除 Schema 对象中的所有数据,而不删除这些对象的结构 (
TRUNCATE命令)。打开和关闭审核选项 (关键字
AUDIT和NOAUDIT)。为数据库对象添加注释。
数据库执行 DDL 语句之前,会进行一个隐式提交。执行完 DDL 语句后,会立即执行一个提交或回滚动作。
以下示例使用 DDL 语句创建 cusotmer 表,使用 DML 语句在表中插入两行。然后,使用 DDL 语句更改表结构,使用 DCL 语句向用户授予和回收此表的读取权限,最后删除该表。
CREATE TABLE customer(cust_id INT PRIMARY KEY,common_name VARCHAR(15));
# DML 语句
INSERT INTO customer VALUES (1,'Tom');
INSERT INTO customer VALUES (2,'Mary');
# DDL 语句
ALTER TABLE customer ADD ( cust_name VARCHAR(40) );
# DCL 语句
GRANT SELECT ON customer to User2;
REVOKE SELECT ON customer from Users;
# DDL 语句
DROP TABLE customer;
上述示例中,两个插入语句后跟随一个 ALTER TABLE 语句,因此数据库提交两个插入操作。如果 ALTER TABLE 语句执行成功,则数据库提交此 DDL 语句;否则,数据库将回滚此 DDL 语句。无论是哪种情况,这两种情况的插入操作已经提交。
目前 OceanBase 数据库支持大部分常用的 DDL 操作,并且对于所有支持的 DDL 操作也都是 OnLine 的,在执行 DDL 的过程中不会阻塞业务的读写操作。
| 操作 | 是否支持 | 是否 ONLINE | 是否重写数据 |
|---|---|---|---|
| 创建/添加索引 | 是 | 是 | 是 |
| 删除索引 | 是 | 是 | 否 |
| 重命名索引 | 是 | 是 | 否 |
| 添加全文索引 | 否 | - | - |
| 添加空间索引 | 否 | - | - |
| 添加主键 | 否 | - | - |
| 删除主键 | 否 | - | - |
| 删除主键并添加新的主键 | 否 | - | - |
| 加列 | 是 | 是 | 是 |
| 删列 | 是 | 是 | 是 |
| 重命名列 | 是 | 是 | 否 |
| 修改列的排列顺序 | 是 | 是 | 否 |
| 修改列默认值 | 是 | 是 | 否 |
| 修改列类型(兼容类型向上修改) 例如: INT 修改为 BIGINT、VARCHAR 修改为 TEXT、BLOB 修改为 LONG BLOB 等 | 是 | 是 | 是 |
| 修改列类型(不兼容类型修改) 例如: INT 修改为 VARCHAR、CHAR 修改为 VARCHAR 等。 | 否 | - | - |
| 设置列约束 NULL | 是 | 是 | 否 |
| 设置列约束 NOT NULL | 否 | - | - |
| 添加外键约束 | 否 | - | - |
| 删除外键约束 | 是 | 是 | 否 |
| 修改行格式 | 是 | 是 | 是 |
| 修改 BLOCK_SIZE | 是 | 是 | 是 |
| 设置字符集 | 否 | - | - |
| 转换字符集 | 否 | - | - |