| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 536 人关注过本帖
标题:约束有啥用?怎么用啊?下面有代码!!
只看楼主 加入收藏
too1998
Rank: 1
等 级:新手上路
帖 子:11
专家分:0
注 册:2006-3-21
收藏
 问题点数:0 回复次数:3 
约束有啥用?怎么用啊?下面有代码!!
create table stu
(
stu_id int-- primary key,--学号是主键
stu_name varchar(20)--unique,--姓名是唯一的
stu_sex char(4)--check(stu_sex in('男','女','人妖')),--性别只有两种所以“CHECK”
stu_age int --check(stu_age>0 and stu_age<100),--年龄只可能在0到100之间
stu_dage datetime default getdate() --定义的是当前系统的时间
)
create table course
(
course_id int primary key,--课程号是唯一的
course_name varchar(20),
)
insert into course(course_id,course_name)values(1,'visual basic')
insert into course(course_id,course_name)values(2,'sql server')

create table sc
(
stu_id int foreign key references stu(stu_id),--参照外键学生的学号
course_id int foreign key references course(course_id),--参照外键学生的课程号
score int,                      --学生的成绩
primary key(stu_id,course_id)            --将学号和课程号列设置为组合键
)

看这个表~~我加入了约束。
但是后来想在STU里加入东西,可是有约束,非要删除才能加。
约束有啥用啊,除了什么完整性啊,什么的。
那我以后做了个表,加了约束,后来我再加入新的内容,不是要把约束删了,然后再加入新内容,再加约束吧??
有没有什么好的办法避免这样的复杂啊?
搜索更多相关主题的帖子: 代码 
2008-11-24 10:01
铲铲
Rank: 7Rank: 7Rank: 7
等 级:贵宾
威 望:34
帖 子:506
专家分:0
注 册:2006-5-2
收藏
得分:0 
约束,顾名思义,就是限制你不要产生不合要求的数据。
搞数据库必须先明白实体、关系这种概念。
举个最简单的例子,一个学生就是一个实体,学生可以用不重复的学号在数据库中登记,那么学号就可以作为主键。也就是在学生这个表中,学号唯一代表了一个数据行,代表了一个实体。
学生所选的课程也是实体。既然是选课,谁来选课?是学生。所以选课表中,可以用一列字段(和学号的数据类型相同),用于存储选课学生的学号,这一列就是连接到学生表上主键的外键。告诉选课表,是谁选的课,因为学号可以唯一表示一个学生。
那么,这个时候约束就开始发挥作用了。如果连学生都没有,学号也没有登记,那哪里有实体来选课呢?你就不可能凭空捏造一个学号来参加选课,因为它本就不存在,也没有了什么意义。
从实体观点来看,这样的数据纯粹就是浪费存储空间。约束的作用还很多,例如在删除一条数据时,可以级联删除引用该表主键的其它外键表中的数据,以避免发生无意义的实体引用。

如你上述,插入数据时受到警告,有几种可能:
1、主键重复或为空,空表示没有任何意义,重复,则与其它登记的实体发生冲突,就不能唯一代表实体了。
2、你要求姓名也是唯一的,可能插入数据的姓名与表中有重复。

铲铲是也
2008-11-24 10:32
梦心
Rank: 4
来 自:福建平和
等 级:贵宾
威 望:13
帖 子:1910
专家分:0
注 册:2007-5-11
收藏
得分:0 
个人理解:
约束就是规范用户的数据,保证数据的一致性和正确性。
比如性别,只能男或者女,如果输入其它字符就是错的,这就是约束的作用~~~~

我清高和我骄傲的倔强,在风中大声的唱:我不听,我不听~~做我自己最特别,呼呼~~啦啦~~~
我的博客园地址: [url]http://[/url]
2008-11-24 10:33
too1998
Rank: 1
等 级:新手上路
帖 子:11
专家分:0
注 册:2006-3-21
收藏
得分:0 
那如果我将要做一个学生的表,
用上面的
create table stu
(
stu_id int-- primary key,--学号是主键
stu_name varchar(20)--unique,--姓名是唯一的
stu_sex char(2)--check(stu_sex in('男','女')),--性别只有两种所以“CHECK”
stu_age int --check(stu_age>0 and stu_age<100),--年龄只可能在0到100之间
stu_dage datetime default getdate() --定义的是当前系统的时间
)

明白了`~ 我先建一个表~~以上`~~
建好后再insert into一些内容,比如
insert into stu values('jack','男',20)
insert into stu values('rose','女',21)
insert into stu values('alsida','男',22)
insert into stu values('rlsi','女',23)
insert into stu values('mako','女',24)
insert into stu values('t-black','男',25)
这个表完成了~~

如果我再建个表
create table course
(
course_id int primary key,--课程号是唯一的
course_name varchar(20),
)
insert into course(course_id,course_name)values(1,'visual basic')
insert into course(course_id,course_name)values(2,'sql server')
完成

create table sc
(
stu_id int foreign key references stu(stu_id),--参照外键学生的学号
course_id int foreign key references course(course_id),--参照外键学生的课程号
score int,                      --学生的成绩
primary key(stu_id,course_id)            --将学号和课程号列设置为组合键
)
完成了~~~实际这三个实体连着一起了`有约束的`~~`

最后一个实体参考前两个实体~~
OK\了~~实体里的元组是可以增加和修改的``~~~~
如果要改变字段的话,对应的才要修改约束才能修改字段吧!

谢谢楼下的两位帮忙~~
2008-11-24 12:00
快速回复:约束有啥用?怎么用啊?下面有代码!!
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.029062 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved