实验6 数据完整性
一、实验目的
1. 掌握企业管理器和Transact-SQL语句(CREATE RULE、DROP RULE)创建和删除规则的方法。
2. 掌握系统存储过程sp_bindrule、sp_unbindrule绑定和解除绑定规则的操作方法,以及sp_help、sp_helptext查询规则信息,sp_rename 更名规则的方法。
3. 掌握企业管理器和Transact-SQL 语句(CREATE DEFAULT 、DROP DEFAULT)创建和删除默认对象的方法。
4. 掌握系统存储过程sp_bindefault、sp_unbindefault 绑定和解除绑定默认对象的操作方法,以及sp_help、sp_helptext 查询规则信息,sp_rename更名规则的方法。
5. 掌握企业管理器和Transact-SQL 语句(CREATE TABLE、AKTER TABLE)定义和删除约束的方法,并了解约束的类型。
二、实验准备
1. 2. 3. 4.
了解数据完整性概念。
了解创建规则和删除规则的语法,了解绑定规则和解除绑定规则的语法。
了解创建默认对象和删除默认对象的语法,了解绑定和删除绑定默认对象的语法。 了解约束的类型,创建约束和删除约束的语法。
三、实验内容和步骤
1.为sutdentsdb数据库创建一个规则,限制所输入的数据为7位0-9的数字。
(1)复制student_info表命名为stu_phone,在stu_phone表中插入一列,列名为“电话号码”。完成以下代码实现该操作。
SELECT*INTO stu_phone FROM student_info
ALTER TABLE stu_phone ADD __ colomn 电话号码__ CHAR(7)NULL
Stu_phone表结构如图1-10所示。 1 2 学号 0001 0002 姓名 刘卫平 张为民 性别 男 男 出生日期 1980-10-01 00:00:00.000 家庭住址 衡山市东风路78号 备注 NULL NULL 电话号码 NULL NULL 1980-12-02 00:00:00.000 东阳市八一北路25号 图 1-10 stu_phone 表结构
(2)创建一个规则phone_rule,限制所输入的数据为7位0~9的数字。实现该规则的代码为
CREATE___RULE___phone_rule AS
@phone LIKE `[0-9] [0-9] [0-9] [0-9] [0-9] [0-9] [0-9]
(3)使用系统存储过程sp_bindrule将phone_rule规则绑定到stu_phone表的“电话号码”列上。实现该操作的代码为
sp_bindrule__phone_rule___,`stu_phone.电话号码`
(4)输入以下代码,进行一次插入操作:
INSERT INTO stu_phone(学号,姓名,电话号码)VALUES(`0009`,`王国强`,`1234yyy`)
产生以下出错信息:
服务器:消息513,级别16,状态1,行1
列的插入或更新与先前的CREATE RULE语句所强制的规则冲突。改语句已终止。冲突发生于数据库`studentsdb`,表`stu_phone`,列`电话号码`
试分析:为什么会产生该出错信息?如果要实现插入操作,应修改INSERT INTO语句中的哪个值?phone_rule规则能否对其他操作(如DELETE)进行规则检查?
INSERT INTO stu_phone(学号,姓名,电话号码) VALUES('0009','王国强','1234yyy')
插入不成功,错误原因在于违反前述的规则约束(即'y'不在'0-9'之内);应修改'1234yyy'中的'yyy',使之均在0-9范围之内;phone_rule规则只对插入和修改进行规则检查,而删除不进行规则检查.
2.使用企业管理器实现实验内容1的每个操作。
3.创建一个规则stusex_rule,将其绑定到stu_phone表的“性别”列上,保证输入的性别值只能是“男”或“女”。
CREATE RULE stusex_rule
AS
@性别 in (‘男’,’女’)
sp_bindrule stusex_rule ‘stu_phone.性别’
4.使用系统存储过程sp_help查询stusex_rule规则列表,使用sp_helptext查询stusex_rule规则的文本,使用sp_rename将stusex_rule规则更名为stu_s_rule。
EXCUTE sp_help stusex_rule
EXCUTE sp_helptext stusex_rule
EXCUTE sp_rename stusex_rule,stu_s_rule
5.删除stu_s_rule规则。 答:应该先解除绑定再删除
EXCUTE sp_unbindrule ‘stu_phone.性别’ DROP stu_s_rule
6.在stuedentdb数据库中,建立日期、货币和字符等数据类型的默认对象。
(1)在查询分析其中,完成以下代码,创建默认对象df_date、df_char、df_money。
--创建日期型默认对象df_date CREATE DEFAULT df_date AS`2006-4-12` GO
----创建字符型默认对象df_char CREATE DEFAULT df_char AS `unknown` GO
--创建货币型默认对象df_money CREATE DEFAULT df_money AS $100 GO
(2) 输入以下代码,在studentdb数据库中创建stu_fee数据表。
CREATE TABLE stu_fee (学号char(10)NOT NULL, 姓名char(8)NOT NULL, 学费 money,
交费日期 datetime, 电话号码 char(7))
表 stu_fee 的数据结构如图1-11所示。 学号
姓名 学费 交费日期 电话号码 图1-11 stu_fee.的数据结构
(3)使用系统存储过程 sp-bindefault 将默认对象 df_date、df_char、df_money 分别绑定在stu_fee表的“学费”、“交费日期”、“电话号码”列上。
Sp_bindefault df_money,'stu_fee.学费' GO
sp_bindefault df_date,'stu_fee.交费日期'
GO
Sp_bindefault df_char,'stu_fee.电话号码' GO
(4) 输入以下代码,在stu_fee表进行插入操作:
INSERT INTO stu_fee(学号,姓名) values('0001','刘卫平')
INSERT INTO stu_fee(学号,姓名,学费)values('0001',张卫民',$120) INSERT INTO stu_fee(学号,姓名,学费,交费日期) VALUES('0001','马东',$110,'2006-5-12') 分析 stu_fee表中插入记录的各列的值是什么? 0001 刘卫平 $100 2006-4-12 0001 张卫民 $120 2006-4-12 0001 马东 $110 2006-5-12
(5)完成以下代码解除默认对象df_char的绑定,并删除之。 按同样的方式,删除默认对象df_date/df_money。 EXCUTE unbindefault 'stu_fee.电话号码' DROP DEFAULT df_char
EXCUTE unbindefault 'stu_fee.交费日期' DROP DEFAULT df_date
EXCUTE unbindefault 'stu_fee.学费' DROP DEFAULT df_money
7.使用企业管理器创建默认对象df_date、df_money,并将它们分别绑定到stu_fee表的“学费”、“交费日期”、“电话号码”列上,在插入操作中观察stu_fee表的数据变化情况,完成操作后,删除这些默认对象。
具体操作。
8.为student_info表添加一页,命名为“院系”,创建一个默认对象stu_d_df,将其绑定到student_info表的“院系”列上,时期默认值为“信息院”,对student_info表进行插入操作,操作完成后,删除该默认对象。分别使用企业管理器和查询分析器实现。
ALTER TABLE student_info
ADD 院系 GO
CREATE DEFAULT stu_d_df AS ‘信息院’ GO
sp_bindefault stu_d_df ‘student_info.院系’
GO
EXCUTE unbindefault 'stu_info.院系' DROP DEFAULT stu_d_df
9.在studentsdb数据库中用CREATE TABLE语句创建表stu_con,并同时创建约束。 (1)创建表的同时创建约束。 表结构如图1-12所示 列名 学号 姓名 性别 出生日期 家庭住址 数据类型 char char char datetime varchar 长度 4 8 2 8 50 图 1-12 要创建的表的结构 约束要求如下:
① 将学号设置为主键(PRIMARY KEY),主键名为pk_sid。 ② 为姓名添加唯一约束(UNIQUE),约束名为uk_name。 ③ 为性别添加默认约束(DEFAULT),默认名称为df_sex,其值为“男”。 ④ 为出生日期添加属性值约束(CHECK),约束名为ck_beday,其检查条件为:出生日期>’1988-1-1’。
CREATE TABLE stu_con 学号 char(4)
CONSTRAINT pk_sid PRIMARY KEY 姓名 char(8)
CONSTRAINT uk_name UNIQUE 性别 char(2)
CONSTRAINT df_sex DEFAULT ‘男’ 出生日期 datetime(8)
CONSTRAINT ck_beday CHECK 出生日期>’1988-1-1’ 家庭住址 varchar(50)
(2)在stu_con表中插入如表1-1所示的数据记录。
分析各约束在插入记录时所起的作用,查看插入记录后表中数据与所插入的数据是否一致?
答:不一致
(3)使用ALTER TABLE语句的DROP CONSTRAINT参数项在查询分析器中删除为stu_con表所建的约束。
ALTER TABLE stu_con