码迷,mamicode.com
首页 > 数据库 > 详细

10. SQL -- 约束

时间:2015-03-21 06:28:40      阅读:261      评论:0      收藏:0      [点我收藏+]

标签:default   database   primary   sql语句   foreign   

一个成功的数据库必须对这些数据进行定义,使它们符合现实,具有完整性,那么这里完整性,就是我们所说的约束.


约束实际上就是使数据完整,也就是存储的数据具有一致性和正确性,为了使我们的数据完整,sql server 2005定义了相应的检查和控制数据完整的一套机制,根据所对应的数据库对象和范围的不同,可以分为实体完整,域完整,参照完整和用户自定义完整4种,这4种完整性的涵义在这里我就不多说了,具体大家可以看书.
约束在实现时,可以通过以下来实现,主要包括 primary key,check,unique,default,foreign key.
那么下面我们就来看看如何在sql server2005中实现以上5种约束.


一,建立student 数据库,方法有两种,这里我们用<新建查询>也就是sql语句来实现,语句如下:
Create database student
写完后按f5执行,数据库就可以了,


二,建立两张表,一个是学生资料表(stuinfo),和学生成绩表(stucj),sql语句如下:
Stuinfo表:

create table stuinfo
(
stuid char(8) not null,
stuname nvarchar(10),
stusex nvarchar(2),
stuage tinyint,
stuaddr varchar(50),
stutel varchar(15),
stuintro varchar(200)
)


Stucj表:

create table stucj
(
stuid char(8) not null,
stuname nvarchar(10),
chinese numeric(4,1),
english numeric(4,1),
math numeric(4,1)
)


三, primary key(主键约束)指的是唯一能将所有记录区分开的字段,以上两张表中的stuid(学生学号)可以作为主键,定义语句是:

use student
go
alter table stuinfo
add constraint pri_id1 primary key(stuid)
alter table stucj
add constraint pri_id2 primary key(stuid)

 

四.Check(核对)约束,指的是限制一列和多列所输入的值的范围。表中shuage字段表示的是学生的年龄,对这个字段我们可以设置它的范围,sql 语句如下:

Use student
Go
Alter table stuinfo
Add constraint ch_age check(stuage>10 and stuage<50)


执行完毕后,你可以向表中添加数据,此时我们的check约束就起作用了。
五.Default(默认)约束,指的是当用户添加数据时,如果没有给该字段添加数据时,系统自动给它一个默认值,上表中的stusex(学生性别)字段,我们就可以给它设置默认值,比如男或女,那么定义的语句如下:

Use student
Go
Alter table stuinfo
Add constraint def_stusex default ‘男’ for stusex


同样再次执行,添加数据时,你不添加stusex的值,看看结果。


六.Foreign key(外键)约束,指的是用于和加强两张表之间的联系,当在添加,修改和删除数据时,保持两张表中数据的一致性。上面stuinfo表和stucj表中的stuid字段就可以设置,sql语句如下:

Use student
Go
alter table stucj
add constraint stu_f foreign key(stuid)
references stuinfo(stuid)


执行完毕后,可以对两张表中添加,删除和修改数据,测试看看。


七.unique(唯一)约束,指的是让字段的数据具有唯一性,该字段内的数据不可以发生从复,但是可以为空,而主键不可以为空,实际上,主键也就是一个唯一性约束。在这里我们把stuname(学生姓名)字段设计成unique,但是实际操作时,学生姓名是可以从复的,这里我们是假设,是为把这个约束制作完。接下来我们看看sql语句:

Use student
Go
alter table stuinfo
add constraint un_stu unique(stuname)


同样,执行完毕后,可以添加数据,测试看看。
以上,我们是一个一个的介绍了约束的使用,实际上在使用时,可以直接在建立表时一起定义,只不过这种定义我们没有给每一个约束命名,操作起来可能不是很方便。那么,接下来我们也来看看这种定义方式,建立一张新表stuinfo1:

Use student
Go
create table stuinfo1
(
stuid char(8) not null primary key,
stuname varchar(10) unique,
stusex char(2) default ‘男‘,
stuage tinyint check(stuage>10 and stuage<40),
stutel char(14)
)


这种方法的缺点是:它的约束名不是很清楚,所以删除时就必须要到管理视图去操作,麻烦一点。下面我们来看看,用sql语句来删除这些约束:

Use student
Go
alter table stuinfo
drop constraint un_stu


我们这里删除的是unique 约束,大家可以试着删除其它约束。
最后,我把添加约束的格式写一下,便于大家参考:
Alter table 表名
Add constraint 约束名 约束类型(字段名或表达式)
删除的格式如下:
Alter table 表名
drop constraint 约束名


本文出自 “Ricky's Blog” 博客,请务必保留此出处http://57388.blog.51cto.com/47388/1622673

10. SQL -- 约束

标签:default   database   primary   sql语句   foreign   

原文地址:http://57388.blog.51cto.com/47388/1622673

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!