日常数据库设计会考虑很多逻辑层,但真正在应用中却很少会做这些简单逻辑的实现,此文仅用以反省。此文所涉内容为sql基础,内容简单。
一、检查约束
1、列约束
一个检查约束由关键字CHECK以及其后的包围在圆括号中的表达式组成。检查约束表达式应该涉及到被约束的列,否则该约束也没什么实际意义。
要指定一个命名的约束,请在约束名称标识符前使用关键词CONSTRAINT,然后把约束定义放在标识符之后(如果没有以这种方式指定一个约束名称,系统将会为我们选择一个)。
create table t(
product_no int not null unique,
role varchar(10) constraint role check (role in('111', '2222', '3333')),
price int constraint price check (price>0)
);
image.png
2、表约束
create table t(
product_no int not null unique,
role varchar(10) constraint role check (role in('111', '2222', '3333')),
price int constraint price check (price>0),
d_price int,
check (d_price > price)
);
image.png
二、非空约束
一个非空约束仅仅指定一个列中不会有空值。
image.png
三、唯一约束
image.png四、主键
一个主键约束表示可以用作表中行的唯一标识符的一个列或者一组列。这要求那些值都是唯一的并且非空。
增加一个主键将自动在主键中列出的列或列组上创建一个唯一B-tree索引。并且会强制这些列被标记为 NOT NULL 。
一个表最多只能有一个主键(可以有任意数量的唯一和非空约束,它们可以达到和主键几乎一样的功能,但只能有一个被标识为主键)。关系数据库理论要求每一个表都要有一个主键。
create table t(
product_no int,
role varchar(10),
price int,
d_price int,
primary key (product_no, role)
);
image.png
五、外键
一个外键约束指定一列(或一组列)中的值必须匹配出现在另一个表中某些行的值。我们说这维持了两个关联表之间的引用完整性。
create table t2(
product_no int,
role varchar(10),
p int,
d_price int,
constraint t_pn_role_fk foreign key (product_no, role) references t(product_no, role)
);
image.png
六、排他约束
create table t(
product_no int not null unique,
role varchar(10) constraint role check (role in('111', '2222', '3333')),
price int constraint price check (price>0),
d_price int,
check (d_price > price)
);
留己自用
网友评论