ALTER TABLE语句

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

语法格式

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

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

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

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 } [, ...] ); - 对名称的修改不会影响所存储的数据。

1. ALTER TABLE table_name 2. RENAME TO new_table_name;

参数说明

  • 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 |               | Grace        |             |
7. 3869 | hello         |              |             |
8. 3869 | hello         |              |             |
9. |               |              |             |
10. 6985 | maps          | Joes         |             |   2200
11. 9976 | world         | James        |             |   5000
12. 4421 | Admin         | Local        |             |   3000
13. 6881 | maps          | Lily         |             |   1000
14. 4320 | tpcds         | Lily         |             |   2000
15. (11 rows)
  • 新增列

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

1. openGauss=# ALTER TABLE customer_t1 ADD date time;

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

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_first_name | character(6) | 8. c_last_name | character(12) | 9. amount | integer | 10. date | time without time zone | - 新增列约束

删除列c_customer_sk为空的行。

1. openGauss=# DELETE FROM customer_t1 WHERE c_customer_sk is NULL;

为列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 | 10. purchase_date | time without time zone | - 删除列

删除列purchase_date。

1. openGauss=# ALTER TABLE customer_t1 DROP purchase_date;

删除后,表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 | | Grace | | 7. 3869 | hello | | | 8. 3869 | hello | | | 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 14. (10 rows)