ALTER TABLE语句

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

    • 在一张已经存在的表上删除列。

    • 修改表的字段类型。

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

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

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

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

    • table_name

      table_name是需要修改的表名。

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

    • column_name

    • data_type

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

    • new_table_name

      修改后新的表名称。

    • new_column_name

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

    • constraint_name

      约束的名称。

    表customer_t1的数据如下。

    1. openGauss=# SELECT * FROM customer_t1;
    2. c_customer_sk | c_customer_id | c_first_name | c_last_name | amount
    3. ---------------+---------------+--------------+-------------+--------
    4. 3869 | hello | Grace | | 1000
    5. 3869 | hello | Grace | | 1000
    6. 3869 | hello | | |
    7. 3869 | hello | | |
    8. | | | |
    9. 6985 | maps | Joes | | 2200
    10. 9976 | world | James | | 5000
    11. 4421 | Admin | Local | | 3000
    12. 6881 | maps | Lily | | 1000
    13. 4320 | tpcds | Lily | | 2000
    • 新增列

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

      1. openGauss=# ALTER TABLE customer_t1 ADD date time;
      1. openGauss=# \d customer_t1
      2. Table "public.customer_t1"
      3. Column | Type | Modifiers
      4. ---------------+------------------------+-----------
      5. c_customer_sk | integer |
      6. c_customer_id | character(5) |
      7. c_first_name | character(6) |
      8. c_last_name | character(8) |
      9. amount | integer |
      10. date | time without time zone |
    • 修改列数据类型

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

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

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

      1. openGauss=# \d customer_t1
      2. Table "public.customer_t1"
      3. Column | Type | Modifiers
      4. ---------------+------------------------+-----------
      5. c_customer_sk | integer |
      6. c_customer_id | character(5) |
      7. c_last_name | character(12) |
      8. amount | integer |
    • 新增列约束

      删除列c_customer_sk为空的行。

      为列c_customer_sk增加非空约束。

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

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

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

      修改列date名称为purchase_date。

      1. openGauss=# ALTER TABLE customer_t1 RENAME date TO purchase_date;

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

      1. openGauss=# \d customer_t1
      2. Table "public.customer_t1"
      3. Column | Type | Modifiers
      4. ---------------+------------------------+-----------
      5. c_customer_sk | integer | not null
      6. c_customer_id | character(5) |
      7. c_first_name | character(6) |
      8. c_last_name | character(12) |
      9. amount | integer |
    • 删除列

      1. openGauss=# ALTER TABLE customer_t1 DROP purchase_date;

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