本文介绍PostgreSQL数据库表相关操作,包括创建表、查看表结构、修改表、删除表、使用各种约束。
1.创建表
创建表就是定义数据列的属性,添加相关约束的过程。创建表语法格式如下:
CREATE TABLE ( 字段名 数据类型 [列约束] [默认值], ... [表约束] );
例如,创建一个students表,SQL语句如下:
CREATE TABLE students ( student_no integer PRIMARY KEY, name text );
2.使用约束
PostgreSQL数据表约束包括:主键约束、外键约束、非空约束等。
主键约束
主键用于唯一标示表中的一条记录,主键分为单字段主键、多字段联合主键。主键约束要求主键列的数据唯一且不能为空。
单字段主键
单字段主键可以在定义列时指定主键;或在定义完所有列后指定主键。示例如下:
CREATE TABLE products ( product_no integer PRIMARY KEY, name text, price numeric );
多字段联合主键
多字段联合主键由多个字段联合组成。示例如下:
CREATE TABLE students ( class integer, name text, age integre, PRIMARY KEY (class, name) );
外键约束
外键用于约束数据的完整性,一个表可以有一个或多个外键,表中的外键必须是其他表的主键。外键数据类型需要与对应主键一致。 例如,有一订单表,其中需要关联产品信息,示例如下:
CREATE TABLE orders ( order_id integer PRIMARY KEY, product_no integer REFERENCES products (product_no), quantity integer );
非空约束
非空约束指字段值不能为空,添加了非空约束的字段插入数据时必须指定字段值,否则会报数据库错误。 示例如下:
CREATE TABLE products ( product_no integer PRIMARY KEY, name text NOT NULL, price numeric );
唯一约束
唯一约束用于保证一个字段或一组字段数据的唯一性。示例如下:
CREATE TABLE products ( product_no integer UNIQUE, name text, price numeric ); 或 CREATE TABLE products ( product_no integer, name text, price numeric, UNIQUE(product_no, name) );
3.修改表
表创建后可能会根据需要对表结构进行调整,PostgreSQL提供了一组用于表修改命令。 对表的修改包括:增加字段,删除字段,增加约束,删除约束,修改缺省值,修改字段数据类型,重命名字段,重命名表。
增加字段,示例如下:
ALTER TABLE products ADD COLUMN name text;
删除字段,示例如下:
ALTER TABLE products DROP COLUMN name text;
增加约束,示例如下:
ALTER TABLE products ADD CONSTRAINT constraint_name UNIQUE (product_no);
删除约束,示例如下:
ALTER TABLE products DROP CONSTRAINT some_name;
修改缺省值,示例如下:
ALTER TABLE products ALTER COLUMN price SET DEFAULT 10;
修改字段数据类型,示例如下:
ALTER TABLE products ALTER COLUMN name TYPE varchar(30);
重命名字段,示例如下:
ALTER TABLE products RENAME COLUMN name TO product_name;
重命表名,示例如下:
ALTER TABLE products RENAME TO product;
4.删除表
删除数据表后,表中的数据也会一并被删除,所以删除前应做好数据备份。表删除包括两类:无关联表删除、关联表删除。
无关联表删除
PostgreSQL中,可以使用DROP TABLE语句一次性删除一个或多个无关联表,示例如下:
DROP TABLE IF EXISTS table1,table2;
有关联表删除
如果表主键被其它表关联为外键,删除时需要首先删除外键。示例如下:
ALTER TABLE orders DROP CONSTRAINT fk_product_no; DROP TABLE products;