mssql sqlserver 主键和外键的功能分享


摘要:
下文主要讲述sqlserver中主键及外键的功能



一、sqlserver主外键的功能

1.1 sqlserver中主键和外键都是对表数据起到约束作用,使表数据更加的完整。
1.2 如果一张表设置了外键,那么数据插入、更新时,将同步验证键值是否存在主键中,不存在,则禁止外键所在的表插入数据
1.3 主键所在的表,删除行数据时,验证是否有外键数据关联值此条数据上,如果存在数据也禁止删除主键行所在的数据
1.4 更新和删除主键数据时,可通过设置级联属性,达到同步更新和删除外键所在的行数据
1.5 主键可以确保数据的唯一性,因为主键列所需的数值必须唯一



二、sqlserver主外键的区别

主键:行数据中主键具有唯一性,不可为null
外键:外键可以重复
—————————————-
主键:保证数据的完整性和唯一性
外键:用于关联其它表,和限制关联表的数据完整性
—————————————-
主键:每张表只允许存在一个主键
外键:一张表,可以拥有多个外键



三、sqlserver主外键的应用举例

/*
例:
创建一个业务单据表
billMain 业务单主表
billDetail 业务单明细表
*/
create table billMain(billNo varchar(30) not null,info varchar(30))  
create table billDetail(billNo varchar(30) not null,infoDetail varchar(30))
go
 
---设置主表上的主键
ALTER TABLE billMain 
ADD CONSTRAINT PK_billNo   
PRIMARY KEY(billNo)
go
---设置主表上的外键
ALTER TABLE  billDetail with nocheck 
ADD CONSTRAINT FK_billNO_ref_billMain
FOREIGN KEY(billNo) REFERENCES billMain(billNo) 


--设置级联外键 -主表billMain上数据更新和删除 子表billDetail上会随着变化
ALTER TABLE billDetail 
ADD CONSTRAINT FK_billNO_ref_billMain2 
FOREIGN KEY(billNo) REFERENCES billMain(billNo)
ON UPDATE CASCADE ON DELETE CASCADE




--获取表上的主外键信息
EXEC sp_helpconstraint 'billDetail' 


---删除表上的外键
ALTER TABLE  billDetail  
drop  CONSTRAINT FK_billNO_ref_billMain


ALTER TABLE  billDetail 
drop CONSTRAINT FK_billNO_ref_billMain2

---删除表上的主键(需先清理主键所对应的外键)
ALTER TABLE billMain 
drop CONSTRAINT PK_billNo  

go
drop table billDetail 
drop table billMain