PostgreSQL ALTER TABLE 命令

在 PostgreSQL 中, ALTER TABLE 命令用于添加,修改,删除一张已经存在表的列。

另外你也可以用 ALTER TABLE 命令添加和删除约束。

语法

用 ALTER TABLE 在一张已存在的表上添加列的语法如下:

									ALTER TABLE table_name ADD column_name datatype;
								

在一张已存在的表上 DROP COLUMN(删除列),语法如下:

									ALTER TABLE table_name DROP COLUMN column_name;
								

修改表中某列的 DATA TYPE(数据类型),语法如下:

									ALTER TABLE table_name ALTER COLUMN column_name TYPE datatype;
								

给表中某列添加 NOT NULL 约束,语法如下:

									ALTER TABLE table_name ALTER column_name datatype NOT NULL;
								

给表中某列 ADD UNIQUE CONSTRAINT( 添加 UNIQUE 约束),语法如下:

									ALTER TABLE table_name
ADD CONSTRAINT MyUniqueConstraint UNIQUE(column1, column2...);
								

给表中 ADD CHECK CONSTRAINT(添加 CHECK 约束),语法如下:

									ALTER TABLE table_name
ADD CONSTRAINT MyUniqueConstraint CHECK (CONDITION);
								

给表 ADD PRIMARY KEY(添加主键),语法如下:

									ALTER TABLE table_name
ADD CONSTRAINT MyPrimaryKey PRIMARY KEY (column1, column2...);
								

DROP CONSTRAINT (删除约束),语法如下:

									ALTER TABLE table_name
DROP CONSTRAINT MyUniqueConstraint;
								

如果是 MYSQL ,代码是这样:

									ALTER TABLE table_name
DROP INDEX MyUniqueConstraint;
								

DROP PRIMARY KEY (删除主键),语法如下:

									ALTER TABLE table_name
DROP CONSTRAINT MyPrimaryKey;
								

如果是 MYSQL ,代码是这样:

									ALTER TABLE table_name
DROP PRIMARY KEY;
								

实例

创建 COMPANY 表(下载 COMPANY SQL 文件 ),数据内容如下:

									yssmxdb# select * from COMPANY;
 id_name _age_address  _salary
----+-------+-----+-----------+--------
  1_Paul _ 32_California|  20000
  2_Allen_ 25_Texas    _ 15000
  3_Teddy_ 23_Norway   _ 20000
  4_Mark _ 25_Rich-Mond_ 65000
  5_David_ 27_Texas    _ 85000
  6_Kim  _ 22_South-Hall|  45000
  7_James_ 24_Houston  _ 10000
(7 rows)
								

下面实例在这张表中添加新的列:

									yssmxdb=# ALTER TABLE COMPANY ADD GENDER char(1);
								

现在表长这样:

									id_name _age_address    _salary_gender
----+-------+-----+-------------+--------+--------
  1_Paul _ 32_California _ 20000 |
  2_Allen_ 25_Texas      _ 15000 |
  3_Teddy_ 23_Norway     _ 20000 |
  4_Mark _ 25_Rich-Mond  _ 65000 |
  5_David_ 27_Texas      _ 85000 |
  6_Kim  _ 22_South-Hall _ 45000 |
  7_James_ 24_Houston    _ 10000 |
(7 rows)
								

下面实例删除 GENDER 列:

									yssmxdb=# ALTER TABLE COMPANY DROP GENDER;
								

得到结果如下:

									id_name _age_address  _salary
----+-------+-----+-----------+--------
  1_Paul _ 32_California|  20000
  2_Allen_ 25_Texas    _ 15000
  3_Teddy_ 23_Norway   _ 20000
  4_Mark _ 25_Rich-Mond_ 65000
  5_David_ 27_Texas    _ 85000
  6_Kim  _ 22_South-Hall|  45000
  7_James_ 24_Houston  _ 10000