暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

openGauss学习笔记-35 openGauss 高级数据管理-ALTER TABLE语句

原创 shuchaoyang 2023-09-29
179

openGauss学习笔记-35 openGauss 高级数据管理-ALTER TABLE语句35.1 语法格式35.2 参数说明35.3 示例

openGauss学习笔记-35 openGauss 高级数据管理-ALTER TABLE语句

修改表,包括修改表的定义、重命名表、重命名表中指定的列、重命名表的约束、设置表的所属模式、添加/更新多个列、打开/关闭行访问控制开关。

35.1 语法格式

  • 在一张已经存在的表上添加列。

    ALTER TABLE table_name
       ADD column_name data_type;
  • 在一张已经存在的表上删除列。

    ALTER TABLE table_name DROP COLUMN column_name;
  • 修改表的字段类型。

    ALTER TABLE table_name
    MODIFY column_name data_type;
  • 为一张已经存在表的列增加/删除非空约束(NOT NULL)。

    ALTER TABLE table_name
      ALTER column_name { SET | DROP } NOT NULL;
  • 重命名表中指定的列。

    ALTER TABLE table_name RENAME  column_name TO new_column_name;
  • 更新多个列。

    ALTER TABLE table_name 
       MODIFY ( { column_name data_type | column_name [ CONSTRAINT constraint_name ] NOT NULL [ ENABLE ] | column_name [ CONSTRAINT constraint_name ] NULL } [, ...] );
  • 对名称的修改不会影响所存储的数据。

    ALTER TABLE table_name 
       RENAME TO new_table_name;

35.2 参数说明

  • table_name

    table_name是需要修改的表名。

    若声明了ONLY选项,则只有那个表被更改。若未声明ONLY,该表及其所有子表都将会被更改。另外,可以在表名称后面显示地增加*选项来指定包括子表,即表示所有后代表都被扫描,这是默认行为。

  • column_name

    现存的或新字段的名称。

  • data_type

    新字段的类型,或者现存字段的新类型。

  • new_table_name

    修改后新的表名称。

  • new_column_name

    表中指定列修改后新的列名称。

  • constraint_name

    约束的名称。

35.3 示例

表customer_t1的数据如下。

openGauss=# SELECT * FROM customer_t1;
c_customer_sk | c_customer_id | c_first_name | c_last_name | amount
---------------+---------------+--------------+-------------+--------
         3869 | hello         | Grace        |             |   1000
         3869 | hello         | Grace        |             |   1000
         3869 |               | Grace        |             |
         3869 | hello         |              |             |
         3869 | hello         |              |             |
              |               |              |             |
         6985 | maps          | Joes         |             |   2200
         9976 | world         | James        |             |   5000
         4421 | Admin         | Local        |             |   3000
         6881 | maps          | Lily         |             |   1000
         4320 | tpcds         | Lily         |             |   2000
(11 rows)
  • 新增列

    在上面的表中添加新的列。

    openGauss=# ALTER TABLE customer_t1 ADD date time;

    查询表customer_t1的结构如下,新增列date成功。

    openGauss=# \d customer_t1
                Table "public.customer_t1"
       Column     |         Type          | Modifiers
    ---------------+------------------------+-----------
    c_customer_sk | integer                |
    c_customer_id | character(5)           |
    c_first_name  | character(6)           |
    c_last_name   | character(8)           |
    amount        | integer                |
    date          | time without time zone |
  • 修改列数据类型

    修改列c的数据类型character(8) 为character(12)。

    openGauss=# ALTER TABLE customer_t1 MODIFY c_last_name character(12);

    查询表customer_t1结构,列c_last_name修改数据类型成功。

    openGauss=# \d customer_t1
                Table "public.customer_t1"
       Column     |         Type          | Modifiers
    ---------------+------------------------+-----------
    c_customer_sk | integer                |
    c_customer_id | character(5)           |
    c_first_name  | character(6)           |
    c_last_name   | character(12)          |
    amount        | integer                |
    date          | time without time zone |
  • 新增列约束

    删除列c_customer_sk为空的行。

    openGauss=# DELETE FROM customer_t1 WHERE c_customer_sk is NULL;

    为列c_customer_sk增加非空约束。

    openGauss=# ALTER TABLE customer_t1 ALTER c_customer_sk SET NOT NULL;

    查询表customer_t1结构,列c_customer_sk新增约束成功。

    openGauss=# \d customer_t1
                Table "public.customer_t1"
       Column     |         Type          | Modifiers
    ---------------+------------------------+-----------
    c_customer_sk | integer                | not null
    c_customer_id | character(5)           |
    c_first_name  | character(6)           |
    c_last_name   | character(12)          |
    amount        | integer                |
    date          | time without time zone |
  • 修改列名称

    修改列date名称为purchase date。

    openGauss=# ALTER TABLE customer_t1  RENAME  date TO purchase_date;

    查询表customer_t1结构,列date名称修改成功。

    openGauss=# \d customer_t1
                Table "public.customer_t1"
       Column     |         Type          | Modifiers
    ---------------+------------------------+-----------
    c_customer_sk | integer                | not null
    c_customer_id | character(5)           |
    c_first_name  | character(6)           |
    c_last_name   | character(12)          |
    amount        | integer                |
    purchase_date | time without time zone |
  • 删除列

    删除列purchase_date。

    openGauss=# ALTER TABLE customer_t1 DROP purchase_date;

    删除后,表customer_t1的数据如下。

    openGauss=# SELECT * FROM customer_t1;
    c_customer_sk | c_customer_id | c_first_name | c_last_name | amount
    ---------------+---------------+--------------+-------------+--------
             3869 | hello         | Grace        |             |   1000
             3869 | hello         | Grace        |             |   1000
             3869 |               | Grace        |             |
             3869 | hello         |              |             |
             3869 | hello         |              |             |
             6985 | maps          | Joes         |             |   2200
             9976 | world         | James        |             |   5000
             4421 | Admin         | Local        |             |   3000
             6881 | maps          | Lily         |             |   1000
             4320 | tpcds         | Lily         |             |   2000
    (10 rows)


👍 点赞,你的认可是我创作的动力!

⭐️ 收藏,你的青睐是我努力的方向!

✏️ 评论,你的意见是我进步的财富!


图片


最后修改时间:2023-12-11 21:43:05
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

文章被以下合辑收录

评论