赞
踩
PostgreSQL在MySQL的基础上多了CHECK约束和EXCLUSION 约束。
CHECK 约束保证列中的所有值满足某一条件,即对输入一条记录要进行检查。如果条件值为 false,则记录违反了约束,且不能输入到表。
例如:学生表中,设置age字段,要求age必须大于0.
CREATE TABLE student(
student_id INT PRIMARY KEY NOT NULL,
name TEXT NOT NULL,
age INT CHECK(age > 0)
);
设置表约束,要求电话号与学号相同。
CREATE TABLE student(
student_id INT PRIMARY KEY NOT NULL,
name TEXT NOT NULL,
age INT CHECK(age > 0), #列约束
tel char(11) NOT NULL ,
stu_num char(11) NOT NULL ,
CHECK (tel = stu_num) #表约束
);
EXCLUSION 约束确保如果使用指定的运算符在指定列或表达式上比较任意两行,至少其中一个运算符比较将返回 false 或 null。
CREATE TABLE student(
sutdent_id INT PRIMARY KEY NOT NULL,
name TEXT,
age INT ,
address CHAR(50),
EXCLUDE USING gist
(name WITH =, -- 如果满足 name 相同,age 不相同则不允许插入,否则允许插入
age WITH <>) -- 其比较的结果是如果整个表边式返回 true,则不允许插入,否则允许
);
通过插入语句确认排他约束的含义。
INSERT INTO student VALUES(1, 'lmz', 22, '东路');
INSERT INTO student VALUES(2, 'lmz', 22, '南路');
-- 此条数据的 NAME 与第一条相同,且 AGE 与第一条也相同,故满足插入条件
INSERT INTO COMPANY7 VALUES(3, 'lmz', 42, '北路');
-- 此数据与上面数据的 NAME 相同,但 AGE 不相同,故不允许插入
默认情况下,列可以保存为 NULL 值。如果您不想某列有 NULL 值,那么需要在该列上定义此约束,指定在该列上不允许 NULL 值。
NULL 与没有数据是不一样的,它代表着未知的数据。
CREATE TABLE student(
student_id INT NOT NULL,
name TEXT NOT NULL,
);
UNIQUE 约束可以设置列是唯一的,避免同一列出现重复值。
CREATE TABLE student(
student_id INT NOT NULL,
name TEXT NOT NULL,
stu_num char(11) NOT NULL UNIQUE
);
在设计数据库时,PRIMARY KEY 非常重要。
PRIMARY KEY 称为主键,是数据表中每一条记录的唯一标识。
设置 UNIQUE 的列可能有多个,但是一张表只有一列可以设置 PRIMARY KEY。
我们可以使用主键来引用表中的行,也可以通过把主键设置为其他表的外键,来创建表之间的关系。
主键是非空约束和唯一约束的组合。
一个表只能有一个主键,它可以由一个或多个字段组成,当多个字段作为主键,它们被称为复合键。
如果一个表在任何字段上定义了一个主键,那么在这些字段上不能有两个记录具有相同的值。
FOREIGN KEY 即外键约束,指定列(或一组列)中的值必须匹配另一个表的某一行中出现的值。
通常一个表中的 FOREIGN KEY 指向另一个表中的 UNIQUE KEY(唯一约束的键),即维护了两个相关表之间的引用完整性。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。