/***********************************************************************
******外键的特性和注意事项***************************
*1,外键预算约束可以将一个字段或多个字段组合定义为外键
* , 一个表可以定义多个外键 . 多个父表其中字段成为一子表的外键
* , 子表的外键约束所定义的字段的数目和数据类型必须要和父表字段相同 ,
* 但是字段名可以不同 .
* , 一个表不但可以链接同一数据库其他表的字段 , 还可以链接到自己表中的其他一个字段
* 条件这链接自己的表字段的之间的字段名不同 ( 同一表不可能要相同的字段名 )
* , 外键不自动创建索引 , 而主键可以自动创建索引 .
* , 外键约束使用 ' 限制删除 ',' 连锁删除 ',' 限制更新 ',' 连锁更新 ',' 设为 NULL' 和 ' 设为默认值 '
* 等方法来维护关联表间的应用完整性
********************************************
***********************************************************************
create table tbDept
(
dId int identity ( 1, 1) primary key not null,
dName char ( 20) not null,
pId int not null,
pDesc text
)
insert into tbDept values ( ' 技术部 ' , 0, ' 的短短的 ' )
insert into tbDept values ( ' 业务部 ' , 0, ' 叮叮当当 ' )
insert into tbDept values ( ' 财务部 ' , 0, ' 叮叮咚咚大 ' )
create table MyUserInfo
(
UserId int identity ( 10, 10) not null
constraint PK_UserId_MyUserInfo
primary key clustered , -- 主键
--1 创建外键
dId int not null
constraint FK_MyUserInfo_tbDept
foreign key
references tbDept( dId),
UserCIP char ( 18) not null
constraint UQ_UserCIP_MyUserInfo unique , -- 唯一约束
UserJSID char ( 6) not null
constraint UQ_userJSID_MyUserId unique , -- 唯一约束
UserName varchar ( 20) not null,
UserTel varchar ( 12) null,
UserMolt int null,
UserAge int not null -- 用户年龄在2-120岁之间
constraint CHK_UserAge_MyUserInfo check ( UserAge > 2 && UserAge < 120)
UserSex char ( 2) not null -- 用户性别男或女
constraint CHK_UserSex_MyUserInfo check ( UserSex= ' 男 ' or UserSex= ' 女 ' ),
-- 用户名和电话号码按 DESC 排序组合是唯一的
constraint UQ_UserName_UserTel_MyUserInfo unique ( UserName desc , UserTel desc ),
--constraint UQ_UserName_UserTel_MyUserInfo unique(UserName desc |asc,UserTel desc |asc)
----constraint UQ_UserName_UserTel_MyUserInfo unique(UserName ,UserTel desc |asc)
-- 用户名和手机号码按 DESC 排序组合是唯一的
constraint UQ_userName_UserMolt_MyUserInfo unique ( UserName desc , UserMolt desc )
);
--2 创建外键
ALTER TABLE MyUserInfo
ADD
constraint FK_MyUserInfo_tbDept
foreign key ( dId)
references tbDept( dId);
--3 创建外键
ALTER TABLE MyUserInfo
with nocheck ADD
constraint FK_MyUserInfo_tbDept
Foreign Key ( dId)
references tbDept( dId)
--4 创建外键
ALTER TABLE MyUserInfo
with check ADD
constraint FK_MyUserInfo_tbDept
Foreign Key ( dId)
references tbDept( dId)