实验7数据库完整性实验.docx
《实验7数据库完整性实验.docx》由会员分享,可在线阅读,更多相关《实验7数据库完整性实验.docx(10页珍藏版)》请在冰豆网上搜索。
![实验7数据库完整性实验.docx](https://file1.bdocx.com/fileroot1/2023-1/2/ff994f20-d403-406f-b20f-088bcef32292/ff994f20-d403-406f-b20f-088bcef322921.gif)
实验7数据库完整性实验
实验七:
数据完整性实验
学号:
姓名:
实验七:
数据完整性实验
实验目的:
加深对数据完整性的理解。
实验内容:
数据库的完整性设置。
实验步骤:
可视化界面的操作方法:
一、实体完整性
1.将student表的“sno”字段设为主键:
在表设计界面中,单击左边的行选定块,选定“sno”字段,单击工具按钮
设置主键。
如图7-1所示:
图7-1
1.将“sc”表的“sno”和“cno”设置为主键:
在表设计界面中,单击并按住Ctrl键拖动左边的行选定块,选定sno和cno字段,单击工具按钮
设置主键。
如图7-2所示:
图7-2
二、域完整性
3.将“ssex”字段设置为只能取“男”,“女”两值:
在表设计界面,点击鼠标右键——CHECK约束,——添加约束,添加CK_student_sex名称,然后在约束表达式框中输入“ssexin('男','女')”。
如图7-3所示。
图6-3
三、参照完整性
4.将“student”表和“sc”表中的“sno”字段设为参照:
打开“sc”表的设计界面,点击工具栏按钮
在弹出的属性(properties)对话框中点击“新建”按钮,在“主键表(Primarykeytable)”下拉框中选择“student”表,在其下的字段选择框中选择“sno”,在“外键表(Foreignkeytable)”下拉框中选择“sc”表,在其下的字段选择框中选择“sno”,单击关闭即可。
见图7-4。
图7-4
命令方式操作方法:
一、实体完整性
1.将“student”表的“sno”字段设为主键:
当“student”表已存在则执行:
altertablestudentaddconstraintpk_snoprimarykey(sno)
当“student”表不存在则执行:
Createtablestudent(snoCHAR(5)primarykey,
snameCHAR(10)NOTNULL,
ssexCHAR
(2),
sageint,
sdeptCHAR(4))
注:
可用命令“droptablestudent”删除“student”表
2.添加一身份证号字段,设置其惟一性.(注:
操作前应删除表中的所有记录)
Altertablestudentaddidchar(18)unique(id)
3.将“sc”表的“sno”和“cno”设置为主键:
当“sc”表已存在则执行:
altertablescaddconstraintPK_SnoCnoprimarykey(sno,cno)
当“sc”表不存在则执行:
Createtablesc(snoCHAR(5),
cnoCHAR
(2),
gradeINTNULL,
constraintPK_SnoCnoprimarykey(sno,cno))
二、域完整性
4.将“ssex”字段设置为只能取“男”,“女”两值:
当“student”表已存在则执行:
altertablestudentaddconstraintCK_Sexcheck(ssexin('男','女'))
当“student”表不存在则执行:
Createtablestudent(snoCHAR(5)primarykey,
snameCHAR(10),
ssexCHAR
(2)check(ssexin('男','女')),
sageint,sdeptCHAR(4))
5.设置学号字段只能输入数字:
altertablestudentaddconstraintCK_Sno_Formatcheck(snolike'[0-9][0-9][0-9][0-9][0-9]')
6.设置身份证号的输入格式:
altertablestudentaddconstraintCK_ID_Formatcheck((idlike'[0-9][0-9][0-9][0-9][0-9][0-9][1-2][0-9][0-9][0-9][0-1][0-9][0-3][0-9][0-9][0-9][0-9]_')OR(idlike'[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-1][0-9][0-3][0-9][0-9][0-9][0-9]'))
7.设置18位身份证号的第7位到第10位为合法的年份(1900-2050)
altertablestudentaddconstraintCK_ID_Format2check(notlen(id)=18or((convert(smallint,substring(id,7,4))>=1900)and(convert(smallint,substring(id,7,4))<=2050)))
三、参照完整性
9.设置男生的年龄必须大于22,女生的年龄必须大于20.
AltertablestudentaddconstraintCK_agecheck(ssex='男'andsage>=22orssex='女'andsage>=20)
10.将“student”表和“sc”表中的“sno”字段设为参照:
当“sc”表已存在则执行:
altertablescaddconstraintFP_snoforeignkey(sno)referencesstudent(sno)
当“sc”表不存在则执行:
Createtablesc(snoCHAR(5)constraintFP_sno
foreignkeyreferencesstudent(sno),
cnoCHAR
(2),gradeINTNULL,
constraintPK_SnoCnoprimarykey(sno,cno))
四、完整性验证
1.实体完整性:
在“student”表数据浏览可视化界面中输入学号相同的两条记录将会出现错误如图7-5所示:
图7-5
或者在命令窗口输入下面两条命令也会出现错误提示:
insertintostudentvalues('95003','张三','男',24,'CS','42222919901012903X')
insertintostudentvalues('95001','李四','女',21,'CS','422229199510129031')
图7-6
下面的语句用来验证“sc”表中的实体完整性:
insertintoscvalues('95002','10',65)
insertintoscvalues('95002','10',90)
图7-7
2.域完整性:
使用下面的语句验证“ssex”字段的域完整性:
insertintostudentvalues('95009','张匀','大',20,'CS',‘42222919901012904X’)
3.参照完整性:
使用下面的语句“验证”sc表中的“sno”字段的域完整性(假设student表中没有学号为“95998”的学生记录):
insertintoscvalues('98998','10',98)
思考:
1.建立课程的实体完整性,和课程号cno的参照完整性;
2.建立年龄的域完整性,约束条件为“年龄在15到30岁之间”
3*.在学生表中添加“出生日期”和“身份证号”字段,设置一完整性规则,确保身份证号中的关于出生日期的数字与“出生日期”字段的值相匹配。
实验小结:
altertablestudentaddconstraintCK_ID_Format3check(len(id)=18