PostgreSQL数据表操作

 2015年04月01日    1108     声明


本文介绍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;