【PostgreSQL-9.6.3】约束
PostgreSQL中的约束有以下五种:主键约束、外键约束、非空约束、唯一性约束、默认约束。下面分别对这五种约束作说明。
一、主键约束(PrimaryKey Constraint)
主键约束要求主键列中的数据非空且唯一,也就是说主键约束其实已经含有非空、唯一性两种约束。主键能够唯一标识数据表中的一
行记录,可以配合外键来定义不
同表之间的关系,并提高查询速度。主键分为两种类型:单字段主键和多字段联合主键。
1.单字段主键
主键由一个字段组成,SQL语句中可以有两种定义格式:
(1)在定义列的同时定义主键
column_name type primary key
如创建表test,定义id列为主键:
createtable test (
id int primary key,
first_name varchar2(10),
job varchar2(15)
);
(2)在定义完所有列后定义主键,即表级别定义主键
[constraintconstraint_name] primary key (column_name)
如创建表test,定义id列为主键:
createtable test (
id int,
first_name varchar2(10),
job varchar2(15),
primarykey (id)
);
2.多字段联合主键
主键由多个字段组合而成,SQL格式如下:
primarykey [column1,column2,column3…]
如创建表test,定义id,first_name列为主键:
createtable test (
id int,
first_name varchar2(10),
job varchar2(15),
primarykey (id,first_name)
);
二、外键约束(ForeignKey Constraint)
外键用来连接两张表,可以是一列或者多列,同一张表中可以有一个或者多个外键。外键可以为空值,但只要不为空,它的值就是主
表里面的主键。主键所在的表称
为主表,或者父表;外键所在的表称为从表,或者子表。外键的创建语句格式为:
[constraint<外键名>]foreign key column1 [column2,column3…]
references<主表名>主键列1,[主键列2,主键列3…]
如创建表test1,定义id1列为外键,参照test2表的主键列id2:
createtable test (
id1 int,
first_name varchar2(10),
job varchar2(15),
constraintfk_test2_id2 foreign key (id1) references test2 (id2)
);
三、非空约束(NotNull Constraint)
非空约束,顾名思义指字段的值不能为空,当向定义了非空约束的列插入空值时,数据库会报错。非空约束的定于语句为:
column_name type not null
如定义test表的id列为非空:
createtable test (
id int not null,
first_name varchar2(10),
job varchar2(15)
);
四、唯一性约束(UniqueConstraint)
唯一性约束要求所在列的值不能重复,并且最多出现一个空值。唯一性约束可以指定一列或者多列的唯一性。
1.定义列的同时定义唯一性约束
column_name type unique
如创建表test,定义id列为唯一:
createtable test (
id int unique,
first_name varchar2(10),
job varchar2(15)
);
2.在定义完所有列以后指定唯一约束
[constraint<constraint_name>] unique (column_name)
如创建表test,定义id列为唯一:
createtable test (
id int ,
first_name varchar2(10),
job varchar2(15)
constraintU_id unique (id)
);
五、默认约束(DefaultConstraint)
默认约束,即为指定列定义默认值,当向表中插入一条记录,即使被定义列没有被赋值,数据库也会给这个列赋予一个之前定义的默
认值。
column_name type default default_value
如创建表test,定义列id的默认值为00:
如创建表test,定义id列为唯一:
createtable test (
id int default 00,
first_name varchar2(10),
job varchar2(15)
);