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

http://seo.woku.com/html/article/2007/06/10/807/ilovemq/1415435.html

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

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

*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)

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值