数据库实验报告 数据完整性Word下载.docx
《数据库实验报告 数据完整性Word下载.docx》由会员分享,可在线阅读,更多相关《数据库实验报告 数据完整性Word下载.docx(15页珍藏版)》请在冰点文库上搜索。
![数据库实验报告 数据完整性Word下载.docx](https://file1.bingdoc.com/fileroot1/2023-4/29/432c812d-b4a7-41ac-82d6-cc56fbbb0c84/432c812d-b4a7-41ac-82d6-cc56fbbb0c841.gif)
(3)使用系统存储过程sp_hndrule将phone_rule规则绑定到stu_phone表的“电话号码”列上。
sp_hndrulephone_rule,‘stu_phone.电话号码’
(4)插入操作输入以下数据:
学号姓名电话号码
0009王国强1234yyy
是否可以成果插入?
如果出现错误,请列出错误信息,为什么会产生该出错信息?
如果要实现插入操作,应修改INSERTINTO语句中的哪个值?
phone_rule规则能否对其他操作(如DELETE)进行规则检查?
INSERTINTOstu_phone(学号,姓名,电话号码)
VALUES('
0009'
'
王国强'
1234yyy'
)
错误信息:
消息513,级别16,状态0,第1行
列的插入或更新与先前的CREATERULE语句所指定的规则发生冲突。
该语句已终止。
冲突发生于数据库'
studentsdb'
,表'
dbo.stu_phone'
,列'
电话号码'
。
语句已终止。
修改后:
可以
2.创建一个规则stusex_rule,将其绑定到stu_phone表的“性别”列上,保证输入的性别值只能是“男”或“女”。
CREATErulestusex_rule
@性别in('
男'
女'
sp_bindrulestusex_rule,'
stu_phone.性别'
3.使用系统存储过程sp_help查询stusex_rule规则列表,使用sp_helptext查询stusex_rule规则的文本,使用sp_rename将stusex_rule规则更名为stu_s_rule。
sp_helpstusex_rule
sp_helptextstusex_rule
sp_renamestusex_rule,stu_s_rule
4.删除stu_s_rule规则。
先解除绑定:
sp_unbindrulestu_s_rule,'
再删除规则:
droprulestu_s_rule
注意:
stu_s_rule为stusex_rule更名后规则名,是否仍然绑定在stu_phone表的“性别”列上,应如何操作才能删除它。
5.在studentdb数据库中,建立日期、货币和字符等数据类型的默认对象。
(1)创建默认对象df_date、df_char、df_money。
●创建日期型默认对象df_date,默认日期为2006-4-12。
●创建字符型默认对象df_char,默认字符为“unknown”
●创建货币型默认对象df_money,默认为100元
CREATEDEFAULTdf_date
AS'
2009-4-12'
GO
CREATEDEFAULTdf_char
unknown'
CREATEDEFAULTdf_money
AS$100
(2)在studentsdb数据库中创建stu_fee数据表。
学号char(10)NOTNULL
姓名char(8)NOTNULL,
学费money
交费日期datetime
电话号码char(7)
表stu_fee的数据结构如图1-11所示。
学号
姓名
性别
交费日期
电话号码
图l-11stu_fee的数据结构
CREATETABLEstu_fee
(学号char(10)NOTNULL,
姓名char()NOTNULL,
学费money,
交费日期datetime,
电话号码char())
(3)使用系统存储过程sp_bindefault将默认对象df_date、df_char、df_money分别绑定在stu_fee表的“学费”、“交费日期”、“电话号码”列上。
sp_bindefaultdf_money,'
stu_fee.学费'
sp_bindefaultdf_date,'
stu_fee.交费日期'
sp_bindefaultdf_char,'
stu_fee.电话号码'
(4)输入命令,在stu_fee表进行插入操作:
(学号,姓名)values('
0001'
,’刘卫平’)
(学号,姓名,学费)values('
,’张卫民’,$120)
(学号,姓名,学费,交费日期)values('
,‘马东‘,$110,’2006-5-12‘)
分析stu_fee表中插入记录的各列的值是什么?
INSERTINTOstu_fee(学号,姓名)VALUES('
刘卫平'
INSERTINTOstu_fee(学号,姓名,学费)VALUES('
张卫民'
$120)
INSERTINTOstu_fee(学号,姓名,学费,交费日期)VALUES('
马东'
$110,'
2006-5-12'
各列值为:
刘卫平,张卫民的交费日期为默认值
(5)完成以下代码解除默认对象df_char、df_date、df_money的绑定,并删除之。
sp_unbindefault'
DROPDEFAULTdf_char
DROPDEFAULTdf_date
DROPDEFAULTdf_money
6.为学生表添加一列,命名为“院系”,创建一个默认对象stu_d_df,将其绑定到学生表的“院系”列上,使其默认值为“信息院”,对学生表进行插入操作,操作完成后,删除该默认对象。
SELECT*FROM学生表
ALTERTABLE学生表ADD院系CHAR(8)NULL
CREATEDEFAULTstu_d_dfAS'
信息院'
sp_bindefaultstu_d_df,'
学生表.院系'
INSERTINTO学生表(学号,姓名)VALUES('
3244'
郭冰骅'
DROPDEFAULTstu_d_df
7.在studentsdb数据库中用CREATETABLE语句创建表stu_con,并同时创建约束。
(1)创建表的同时创建约束。
表结构如图1-12所示。
图1-12要创建的表的结构
约束要求如下:
①将学号设置为主键(PRIMARYKEY),主键名为pk_sid。
②为姓名添加唯一约束(UNIQUE),约束名为uk_name。
③为性别添加默认约束(DEFAULT),默认名称为df_sex,其值为“男”
④为出生日期添加属性值约束(CHECK),约束名为ck_bday,其检查条件为:
出生日期>
'
1988-1-1’。
(2)在stu_con表中插入如表1-1所示的数据记录。
表1-1在stu_con表中插入的数据
出生日期
家庭住址
0009
张小东
1989-4-6
0010
李梅
男
1983-8-5
0011
王强
1988-9-10
0012
1989-6-3
分析各约束在插入记录时所起的作用,查看插入记录后表中数据与所插入的数据是否一致?
CREATETABLEstu_con
(学号char(4)NOTNULLCONSTRAINTpk_sidPRIMARYKEY,
姓名char(8)NOTNULLCONSTRAINTuk_nameUNIQUE,
学费money,
性别char
(2)CONSTRAINTdf_sexDEFAULT('
),
出生日期datetimeCONSTRAINTck_bdayCHECK(出生日期>
1988-1-1'
家庭住址char(50))
INSERTINTOstu_con(学号,姓名,出生日期)VALUES('
张小东'
1989-4-6'
INSERTINTOstu_con(学号,姓名,性别,出生日期)VALUES('
0010'
李梅'
1983-8-5'
0011'
王强'
1988-9-10'
0012'
1989-6-3'
运行结果:
(1行受影响)
消息547,级别16,状态0,第2行
INSERT语句与CHECK约束"
ck_bday"
冲突。
该冲突发生于数据库"
studentsdb"
,表"
dbo.stu_con"
column'
出生日期'
消息2627,级别14,状态1,第4行
违反了UNIQUEKEY约束'
uk_name'
不能在对象'
dbo.stu_con'
中插入重复键。
(3)使用ALTERTABLE语句的DROPCONSTRAINT参数项在查询分析器中删除为stu_con表所建的约束。
ALTERTABLEstu_con
DROPCONSTRAINTpk_sid
DROPCONSTRAINTuk_name
DROPCONSTRAINTdf_sex
DROPCONSTRAINTck_bday
8.用SQLServer管理平台完成实验内容7的所有设置。
出现问题!
只能出现张小东的信息
9.在查询分析器中,为studentsdb数据库的成绩表添加外键约束(FOREIGNKEY),要求将“学号”设置为外键,参照表为学生表,外键名称为fk_sid。
ALTERTABLE成绩表
ADDCONSTRAINTfk_sid
FOREIGNKEY(学号)references学生表(学号)
学生表里的学号一定要与成绩表中的学号对应,否则会报错冲突
⑴使用系统存储过程sp_help查看grade表的外键信息。
sp_help成绩表
⑵在成绩表中插入表1-2所示记录,观察SQLServer会做何处理,为什么?
如何解决所产生的问题?
表1-2
课程编号
分数
0100
0001
78
INSERTINTO成绩表(学号,课程编号,分数)VALUES('
78'
出现问题:
INSERT语句与FOREIGNKEY约束"
fk_sid"
dbo.学生表"
学号'
解决问题:
在学生表中先插入一个学号为0010的学生信息
⑶使用查询分析器删除成绩表的外键fk_sid。
ALTERtable成绩表
DROPCONSTRAINTfk_sid
四、实验思考
1.在SQLServer2005中,可采用哪些方法实现数据完整性?
答:
数据类型、主键、外键、默认值、约束与规则
2,比较默认对象和默认约束的异同。
相同点:
默认对象与默认约束功能相似。
默认值可以在没有指定具体数据的列中自动插入数据。
默认约束是通过定义列的默认值或使用数据库的默认值对象绑定表的列,以确保在没有为某列指定数据时,来指定列的值。
每列只能有一个默认约束一个默认值
不同点:
默认对象与CREATTABLE和ALTERTABLE语句一起使用,而默认约束只能用于INSERT语句。
3.在数据库中建立的规则不绑定到到数据表的字段上会起作用吗?
为什么?
答:
不会规则仅仅只是一个存在与数据库中的对象,并未发生作用。