更新时间:2026-07-28 GMT+08:00
分享

DDL

简介

数据库的 DDL 功能用于数据库对象的变更。GaussDB支持如下DDL功能:
  • 索引操作
  • 主键操作
  • 列操作
  • 生成列操作
  • 外键操作
  • 表操作
  • 分区操作
  • 模式操作
  • 数据库实例操作
  • 表空间操作
按照是否涉及 DDL 目标对象数据的处理,DDL 语句可以划分为两种类型:
  • 逻辑 DDL 语句:仅修改数据库对象的元数据,不处理对象存储的数据,例如变更表名或变更列名。
  • 物理 DDL 语句:同时修改变更对象的元数据和对象所存储的用户数据。例如,为表创建索引,需要修改表定义并进行全表扫描以构建新索引。

原理

  • 逻辑DDL语句:因仅需要修改数据库对象的元数据,因此执行时间通常较短,只需要几十毫秒或者几秒。执行这类 DDL 语句几乎不消耗系统资源,因此不会影响业务负载。
  • 物理DDL语句:执行时间较长,且执行时间与表的数据量、机器配置以及业务负载有关。离线DDL执行期间加排他锁,数据重组与元数据修改完后提交后释放锁,因此执行期间会阻塞业务执行。物理DDL会长时间阻塞业务,因此GaussDB提供在线DDL在对业务影响较小的情况下进行DDL,减少对业务的影响,提高业务运行的连续性和数据库的可用性。在线DDL不会长时间加排他锁,执行中允许对该表的并发读写操作,减少对用户业务运行影响。

示例

本小节介绍GaussDBDDL基本功能,因DDL功能比较多,仅介绍部分常用操作,如列操作和表操作等。

  1. 创建表。

    gaussdb=# CREATE TABLE t1(c1 INT,c2 INT);
    CREATE TABLE
    gaussdb=# INSERT INTO t1 VALUES(generate_series(1,10), generate_series(1,10));
    INSERT 0 10

  2. 增加列。

    gaussdb=# ALTER TABLE t1 ADD COLUMN c3 INTEGER;
    ALTER TABLE

  3. 删除列。

    gaussdb=# ALTER TABLE t1 DROP COLUMN c3;
    ALTER TABLE

  4. 重命名表。

    gaussdb=# ALTER TABLE t1 RENAME TO t2;
    ALTER TABLE
    gaussdb=# ALTER TABLE t2 RENAME TO t1;
    ALTER TABLE

  5. 修改列类型。

    • 在线修改列类型。
      gaussdb=# ALTER TABLE ONLINE t1 ALTER c2 TYPE BIGINT;
      ALTER TABLE 
    • 离线修改列类型。
      gaussdb=# ALTER TABLE t1 ALTER c2 TYPE INT;
      ALTER TABLE

另请阅读

  • 离线DDL另请阅读《参考》中“SQL参考 > SQL语法 > DDL语法一览表”章节。
  • 在线DDL另请阅读在线DDL、《参考》中“SQL参考 > SQL语法 > Online DDL及其操作”章节。

相关文档