(SQL 技术篇)主键,外键,唯一约束,check约束

/***********************************************************************************

******外键的特性和注意事项***************************

*1,外键预算约束可以将一个字段或多个字段组合定义为外键

*, 一个表可以定义多个外键.多个父表其中字段成为一子表的外键

*, 子表的外键约束所定义的字段的数目和数据类型必须要和父表字段相同,

*   但是字段名可以不同.

*, 一个表不但可以链接同一数据库其他表的字段,还可以链接到自己表中的其他一个字段

*   条件这链接自己的表字段的之间的字段名不同(同一表不可能要相同的字段名)

* ,外键不自动创建索引,而主键可以自动创建索引.

*, 外键约束使用'限制删除','连锁删除','限制更新','连锁更新','设为NULL'和'设为默认值'

* 等方法来维护关联表间的应用完整性

********************************************

****************************************************************************************/

use SQLServer2005

go

create table 我的员工

(

员工编号int identity(10,10) not null

constraint PK_员工编号_我的员工

primary key clustered,

身份号码char(18) not null

constraint UQ_身份号码_我的员工unique,

技能鉴定编号char(6) not null

constraint UQ_技能鉴定编号_员工编号unique,

姓名varchar(20) null,

性别 char(2) not null

constraint CHK_性别_我的员工

check(性别='男' or 性别='女'),

电话号码varchar(11) null,

移动电话 int null,

 

constraint UQ_姓名_电话号码_我的员工unique(姓名desc,电话号码desc),

constraint UQ_姓名_移动电话_我的员工unique(姓名desc,移动电话desc)

 

);

select * from 我的员工

 

insert into 我的员工values('111111111111111111','Dee333','aaaa','男','11111111111',1111111111)

 

insert into 我的员工values('222222222222222222','DRR333','aaaa','男','22222222222',222222222)

 

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)

 

posted @ 2010-06-18 10:47  地、  阅读(1108)  评论(1编辑  收藏  举报