数据库实验6 数据完整性(答案)
- 格式:doc
- 大小:127.00 KB
- 文档页数:6
数据库技术与应用实验 实验6 数据完整性
南京师范大学中北学院
1
实验6 数据完整性
学号:18103317
专业:电子信息工程
一、实验内容和步骤
1.为studentsdb数据库创建一个规则,限制所输入的数据为7位0~9的数
字。
(1)复制学生表命名为stu_phone,在stu_phone表中插入一列,列名为“电
话号码”。完成以下代码实现该操作。
SELECT * INTO stu_phone FROM 学生表
ALTER TABLE stu_phone ADD CHAR(7)NULL
stu_phone表结构如图1-10所示。
图1-10 stu_phone表结构
(2)创建一个规则phone_rule,限制所输入的数据为7位0~9的数字。
Create rule phone_rule
As @value like '[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]'
(3)使用系统存储过程sp_hndrule将phone_rule规则绑定到stu_phone表的
“电话号码”列上。
sp_bindrule phone_rule, 'stu_phone.电话号码'
(4)插入操作输入以下数据:
学号 姓名 电话号码
数据库技术与应用实验 实验6 数据完整性
南京师范大学中北学院
2
0009 王国强 1234yyy
是否可以成果插入?如果出现错误,请列出错误信息,为什么会产生该出错
信息?如果要实现插入操作,应修改INSERT INTO语句中的哪个值?phone_rule规
则能否对其他操作(如DELETE)进行规则检查?
消息213,级别16,状态1,第1 行
插入错误: 列名或所提供值的数目与表定义不匹配。
2.创建一个规则stusex_rule,将其绑定到stu_phone表的“性别”列上,
保证输入的性别值只能是“男”或“女”。
CREATE RULE stusex_rule
AS @性别in ('男','女')
3.使用系统存储过程sp_help查询stusex_rule规则列表,使用sp_helptext
查询stusex_rule规则的文本,使用sp_rename将stusex_rule规则更名为
stu_s_rule。
4.删除stu_s_rule规则。
注意:stu_s_ rule为stusex_ rule更名后规则名,是否仍然绑定在stu_phone表的“性别”
列上,应如何操作才能删除它。
5.在studentdb数据库中,建立日期、货币和字符等数据类型的默认对象。
(1)创建默认对象df_date、df_char、df_money。
创建日期型默认对象df_date,默认日期为2006-4-12。
CREATE DEFAULT df_date
AS '2006-4-12'
创建字符型默认对象df_char,默认字符为“unknown”
CREATE DEFAULT df_char
AS 'unknown'
创建货币型默认对象df_money,默认为100元
CREATE DEFAULT df_money
数据库技术与应用实验 实验6 数据完整性
南京师范大学中北学院
3
AS $100
(2)在studentsdb数据库中创建stu_fee数据表。
学号 char(10) NOT NULL
姓名 char(8) NOT NULL,
学费 money
交费日期 datetime
电话号码 char(7)
表stu_fee的数据结构如图1-11所示。
图l-11 stu_fee的数据结构
CREATE TABLE [dbo].[stu_fee](
[学号] [char](10) COLLATE Chinese_PRC_CI_AS NOT NULL,
[姓名] [char](8) COLLATE Chinese_PRC_CI_AS NOT NULL,
[学费] [money] NULL,
[缴费日期] [datetime] NULL,
[电话号码] [char](7) COLLATE Chinese_PRC_CI_AS NULL
) ON [PRIMARY]
(3)使用系统存储过程sp_bindehult将默认对象df_date、df_char、df_money
分别绑定在stu_fee表的“学费”、“交费日期”、“电话号码”列上。
sp_bindefault df_date,
'stu_fee.缴费日期'
sp_bindefault df_char,
'stu_fee.电话号码'
sp_bindefault df_money,
'stu_fee.学费'
学号 姓名 性别 交费日期 电话号码
数据库技术与应用实验 实验6 数据完整性
南京师范大学中北学院
4
(4)输入命令,在stu_fee表进行插入操作:
(学号,姓名) values ('0001',’刘卫平’)
(学号,姓名,学费) values ('0001',’张卫民’,$120)
(学号,姓名,学费,交费日期) values ('0001',‘马东‘,$110,’2006-5-12‘)
分析stu_fee表中插入记录的各列的值是什么?
(5)完成以下代码解除默认对象df_char、df_date、df_money的绑定,并删
除之。
6.为学生表添加一列,命名为“院系”,创建一个默认对象stu_d_df,将其
绑定到学生表的“院系”列上,使其默认值为“信息院”,对学生表进行插入操作,
操作完成后,删除该默认对象。
7.在studentsdb数据库中用CREATE TABLE语句创建表stu_con,并同时创
建约束。
(1)创建表的同时创建约束。表结构如图1-12所示。
图1-12 要创建的表的结构
约束要求如下:
①将学号设置为主键(PRIMARY KEY),主键名为pk_sid。
②为姓名添加唯一约束(UNIQUE),约束名为uk_name。
③为性别添加默认约束(DEFAULT),默认名称为df_sex,其值为“男”
④为出生日期添加属性值约束(CHECK),约束名为ck_bday,其检查条件为:
出生日期>'1988-1-1’。
CREATE TABLE stu_con
( 学号char(4) NOT NULL
数据库技术与应用实验 实验6 数据完整性
南京师范大学中北学院
5
CONSTRAINT pk_sid PRIMARY KEY,
姓名char(8) CONSTRAINT uk_name unique nonclustered,
性别char(2) CONSTRAINT df_sex DEFAULT ('男'),
出生年月datetime CONSTRAINT ck_bday check (出生年月>'1988-1-1'),
家庭住址varchar(50)
)
(2)在stu_con表中插入如表1-1所示的数据记录。
表1-1 在stu_con表中插入的数据
分析各约束在插入记录时所起的作用,查看插入记录后表中数据与所插入的
数据是否一致?
(3)使用ALTER TABLE语句的DROP CONSTRAINT参数项在查询分析器中删除为
stu_con表所建的约束。
ALTER TABLE stu_con
DROP CONSTRAINT uk_name,df_sex,ck_bday
8.用对象资源管理器中数据库关系图为studentsdb数据库的成绩表添加外
键约束(FOREIGN KEY),要求将“学号”设置为外键,参照表为学生表,外键名称
为fk_sid。
⑴使用系统存储过程sp_help查看成绩表的外键信息。
⑵在成绩表中插入表1-2所示记录,观察SQLServer会做何处理,为什么?
如何解决所产生的问题?
表1-2
学号 课程编号 分数
0100 0001 78
INSERT 语句与FOREIGN KEY 约束"FK_成绩表_学生表"冲突。该冲突发生于数据库"studentsdb",表"dbo.学生表",
学号 姓名 性别 出生日期 家庭住址
0009 张小东 1989-4-6
0010 李梅 男 1983-8-5
0011 王强 1988-9-10
0012 王强 1989-6-3
数据库技术与应用实验 实验6 数据完整性
南京师范大学中北学院
6
column '学号'。