云数据库 GAUSSDB-ALTER TABLE:修改约束示例

时间:2024-12-19 14:11:36

修改约束示例

  • 为列添加非空约束
    --建表。
    gaussdb=# CREATE TABLE test_alt3(pid INT, areaid CHAR(5), name VARCHAR(20));
    
    --为pid添加非空约束。
    gaussdb=# ALTER TABLE test_alt3 MODIFY pid NOT NULL;
    
    --查看。
    gaussdb=# \d test_alt3
              Table "public.test_alt3"
     Column |         Type          | Modifiers 
    --------+-----------------------+-----------
     pid    | integer               | not null
     areaid | character(5)          | 
     name   | character varying(20) |
    
    --取消列的非空约束。
    gaussdb=# ALTER TABLE test_alt3 MODIFY pid NULL;
    
    --在线为pid添加非空约束。
    gaussdb=# ALTER TABLE ONLINE test_alt3 MODIFY pid NOT NULL;
    
    --查看。
    gaussdb=# \d test_alt3
              Table "public.test_alt3"
     Column |         Type          | Modifiers 
    --------+-----------------------+-----------
     pid    | integer               | not null
     areaid | character(5)          | 
     name   | character varying(20) |
  • 取消列的非空约束
    gaussdb=# ALTER TABLE test_alt3 MODIFY pid NULL;
    --查看。
    gaussdb=# \d test_alt3
              Table "public.test_alt3"
     Column |         Type          | Modifiers 
    --------+-----------------------+-----------
     pid    | integer               | 
     areaid | character(5)          | 
     name   | character varying(20) | 
  • 修改字段默认值
    --修改test_alt3表中id的默认值。
    gaussdb=# ALTER TABLE test_alt3 ALTER COLUMN areaid SET DEFAULT '00000';
    
    --查看。
    gaussdb=# \d test_alt3
                     Table "public.test_alt3"
     Column |         Type          |        Modifiers        
    --------+-----------------------+-------------------------
     pid    | integer               | 
     areaid | character(5)          | default '00000'::bpchar
     name   | character varying(20) |
    --删除id的默认值。
    gaussdb=# ALTER TABLE test_alt3 ALTER COLUMN areaid DROP DEFAULT;
    
    --查看。
    gaussdb=# \d test_alt3
              Table "public.test_alt3"
     Column |         Type          | Modifiers 
    --------+-----------------------+-----------
     pid    | integer               | 
     areaid | character(5)          | 
     name   | character varying(20) |
  • 添加表级约束
    • 直接添加约束。
      --给表添加主键约束。
      gaussdb=# ALTER TABLE test_alt3 ADD CONSTRAINT pk_test3_pid PRIMARY KEY (pid);
      
      --查看。
      gaussdb=# \d test_alt3
                Table "public.test_alt3"
       Column |         Type          | Modifiers 
      --------+-----------------------+-----------
       pid    | integer               | not null
       areaid | character(5)          | 
       name   | character varying(20) | 
      Indexes:
          "pk_test3_pid" PRIMARY KEY, ubtree (pid) WITH (storage_type=USTORE) TABLESPACE pg_default
      
      --删除表
      gaussdb=# DROP TABLE IF EXISTS test_alt3;
      
      --建表。
      gaussdb=# CREATE TABLE test_alt3(pid INT, areaid CHAR(5), name VARCHAR(20));
      
      --在线给表添加主键约束。
      gaussdb=# ALTER TABLE ONLINE test_alt3 ADD CONSTRAINT pk_test3_pid PRIMARY KEY (pid);
      
      --查看。
      gaussdb=# \d test_alt3
                Table "public.test_alt3"
       Column |         Type          | Modifiers 
      --------+-----------------------+-----------
       pid    | integer               | not null
       areaid | character(5)          | 
       name   | character varying(20) | 
      Indexes:
          "pk_test3_pid" PRIMARY KEY, ubtree (pid) WITH (storage_type=USTORE) TABLESPACE pg_default
    • 先创建索引然后再添加约束。
      --建表。
      gaussdb=# CREATE TABLE test_alt4(c1 INT, c2 INT);
      
      --建索引。
      gaussdb=# CREATE UNIQUE INDEX pk_test4_c1 ON test_alt4(c1);
      
      --添加约束时关联已经创建的索引。
      gaussdb=# ALTER TABLE test_alt4 ADD CONSTRAINT pk_test4_c1 PRIMARY KEY USING INDEX pk_test4_c1;
      
      --查看。
      gaussdb=# \d test_alt4
         Table "public.test_alt4"
       Column |  Type   | Modifiers 
      --------+---------+-----------
       c1     | integer | not null
       c2     | integer | 
      Indexes:
          "pk_test4_c1" PRIMARY KEY, ubtree (c1) WITH (storage_type=USTORE) TABLESPACE pg_default
      
      --删除。
      gaussdb=# DROP TABLE test_alt4;
  • 删除表级约束
    --删除约束。
    gaussdb=# ALTER TABLE test_alt3 DROP CONSTRAINT IF EXISTS pk_test3_pid;
    
    --查看。
    gaussdb=# \d test_alt3
              Table "public.test_alt3"
     Column |         Type          | Modifiers 
    --------+-----------------------+-----------
     pid    | integer               | not null
     areaid | character(5)          | 
     name   | character varying(20) | 
    
    --删除。
    gaussdb=# DROP TABLE test_alt3;
    
    --删除主键约束(该语法仅在MYSQL兼容模式下支持)。
    gaussdb=# CREATE TABLE test_drop_primary_key(c1 INT PRIMARY KEY);
    gaussdb=# \d test_drop_primary_key
    Table "public.test_drop_primary_key"
     Column |  Type   | Modifiers 
    --------+---------+-----------
     c1     | integer | not null
    Indexes:
        "test_drop_primary_key_pkey" PRIMARY KEY, ubtree (c1) WITH (storage_type=USTORE) TABLESPACE pg_default
    
    
    gaussdb=# ALTER TABLE test_drop_primary_key DROP PRIMARY KEY;
    gaussdb=# \d test_drop_primary_key
    Table "public.test_drop_primary_key"
     Column |  Type   | Modifiers 
    --------+---------+-----------
     c1     | integer | not null
  • 重命名约束。
    --创建表tbl_test1,指定主键约束。
    gaussdb=# CREATE TABLE tbl_test1(
        id int,
        name varchar(50),
        CONSTRAINT aaa PRIMARY KEY (id)
    );
    
    --重命名约束。
    gaussdb=# ALTER TABLE tbl_test1 RENAME CONSTRAINT aaa TO pk_test1_id;
    
    --查看信息。
    gaussdb=# \d tbl_test1;
              Table "public.tbl_test1"
     Column |         Type          | Modifiers 
    --------+-----------------------+-----------
     id     | integer               | not null
     name   | character varying(50) | 
    Indexes:
        "pk_test1_id" PRIMARY KEY, ubtree (id) WITH (storage_type=USTORE) TABLESPACE pg_default
    
    
    --删除表。
    gaussdb=# DROP TABLE tbl_test1;
support.huaweicloud.com/distributed-devg-v8-gaussdb/gaussdb-12-0509.html