1. 非空约束
列的为空性决定表中的行是否可以包含空值。空置(NULL)不同于零(0)/空白或者长度为零的字符串(“”)。
(1)创建非空约束
create table orders ( docentry int constraint pk_id primary key not null, --红色部分非空约束 customer_number varchar(20), order_number varchar(20) , order_line int, order_price float )
(2)修改非空约束
alter table orders alter column customer_number varchar(20) not null alter table orders alter column order_number varchar(20) not null alter table orders alter column order_line int not null
2. 主键约束
主键约束只能有一个,且不可为空,通常用于标识列。
(1)新增主键约束
create table orders ( docentry int constraint pk_od primary key not null, --红色部分主键约束 customer_number varchar(20), order_number varchar(20) , order_line int, order_price float )
(2)删除主键约束,若想修改主键约束,必先删除原有主键约束
alter table orders drop constraint pk_od
(3)更改主键约束
alter table orders add constraint pk_od primary key (docentry, order_number, order_line, customer_number) --这里括号里面写入多个列的话,表明是聚集索引,只要四个字段串起来的值唯一即可
3. 唯一约束
主键必然是唯一且不为空,但是唯一不一定是主键,而且主键只能有一个,但是唯一约束仅仅是为了保持某些列具有唯一性而已,所以可以有多列。也就是说一张表里只能有一个主键约束,但可以有多个唯一约束。
比如invocies表中的docentry是录入系统的id,要作为主键,而invocie_number是发票编号,可作为唯一约束。
(1)增加唯一约束
create table invoices ( docentry int constraint pk_inv primary key not null, --主键约束,不可为空 customer_number varchar(20), invoice_number varchar(20) constraint uni_inv unique, --唯一约束,可为空 invoice_line int, invoice_price float ) go
(2)修改唯一约束,如果要修改某列的唯一约束,必须先删除该列原有唯一约束
orders表中的order_number作为合同订单编号,也可以做唯一约束
alter table orders add constraint uni_od unique (order_number) --添加唯一约束
(3)删除唯一约束
alter table orders drop uni_od
4. 检查约束
检查约束(check)用于约束放入列中的有效值。
比如我们需要约束采购订单的状态,open,close用O,C来表示。(实际上工作中,前端通常会通过前端语言进行约束,数据库方面一般不需要这么做)
(1)创建检查约束
create table purchases ( docentry int constraint pk_pr primary key not null, vendor_number varchar(20), purchase_number varchar(20) constraint uni_pr unique, purchase_line int, purchase_price float, purchase_status char constraint ck_pr check(purchase_status in ('C', 'O')) --创建检查约束 ) go
(2)更改现有表中的检查约束
alter table purchases add constraint ck_pl check(len(purchase_line)<10) --给行号增加约束,字符长度不可大于10
(3)删除检查约束,如果要修改某列的检查约束,必须先删除原有检查约束。
alter table purchases drop constraint ck_pl
5. 默认约束和外键约束
(1)新建默认约束和外键约束
USE [Howie] create table purchases ( docentry int constraint pk_pr primary key not null, vendor_number varchar(20), purchase_number varchar(20) constraint uni_pr unique, purchase_line int, purchase_price float, purchase_status char constraint ck_pr check(purchase_status in ('C', 'O')) constraint de_pr default 'O' , --purchase_status的状态默认为O baseentry int constraint fp_pr foreign key (baseentry) references orders (docentry) --贸易公司一般自己不生产,所以每个客户订单都会对应到一个采购单,所以采购单的(外键)baseentry对应客户订单的docentry ) go
(2)删除默认约束和外键约束
alter table purchases drop constraint de_pr,fp_pr
(3)现有表中更改默认约束和外键约束
alter table purchases add constraint de_pr default 'O' for purchase_status --默认约束 alter table purchases add constraint fp_pr foreign key (baseentry) references orders (docentry) --外键约束
///