实验6数据完整性Word格式文档下载.docx
《实验6数据完整性Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《实验6数据完整性Word格式文档下载.docx(13页珍藏版)》请在冰豆网上搜索。
1234yyy'
)
产生以下出错信息:
消息513,级别16,状态0,第1行
列的插入或更新与先前的CREATERULE语句所指定的规则发生冲突。
该语句已终止。
冲突发生于
数据库'
studentsdb'
表'
dbo.stu_phone'
列'
电话号码'
。
语句已终止。
试分析:
为什么会产生该出错信息?
如果要实现插入操作,应修改INSERTINTO语句中的哪个值?
phone_rule规则能否对其他操作(如DELETE)进行规则检查?
(2)创建一个规则stusex_rule,将其绑定到stu_phone表的“性别”列上,保证输入的性别值只能是“男”或“女”。
(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数据库中,建立日期、货币和字符等数据类型的默认对象。
①在查询设计器中,完成以下代码,创建默认对象df_date、df_char、df_money。
--创建日期型默认对象df_date
CREATEdf_date
AS'
2009-4-12'
GO
--创建字符型默认对象df_char
CREATEDEFAULTdf_char
'
unknown'
--创建货币型默认对象df_money
CREATEDEFAULT
AS$100
②输入以下代码,在studentsdb数据库中创建stu_fee数据表。
CREATETABLEstu_fee
(学号char(10)NOTNULL,
姓名char(8)NOTNULL,
学费money,
交费日期datetime,
电话号码char(7))
表stu_fee的数据结构如图1-11所示。
图1-11stu_fee的数据结构
③使用系统存储过程sp_bindefault将默认对象df_money、df_date、df_char分别绑定在stu_fee表的“学费”、“交费日期”、“电话号码”列上。
df_money,'
stu_fee.学费'
sp_bindefault,'
stu_fee.交费日期'
sp_bindefaultdf_char,'
stu_fee.电话号码'
④输入以下代码,在stu_fee表进行插入操作:
INSERTINTOstu_fee(学号,姓名)VALUES('
0001'
刘卫平'
INSERTINTOstu_fee(学号,姓名,学费)VALUES('
张卫民'
$120)
INSERTINTOstu_fee(学号,姓名,学费,交费日期)
VALUES('
马东'
$110,'
2006-5-12'
分析stu_fee表中插入记录的各列的值是什么?
⑤完成以下代码,解除默认对象df_char的绑定,并删除之。
'
DEFAULTdf_char
按同样的方式,删除默认对象df_date、df_money。
(6)为student_info表添加一列,命名为“院系”,创建一个默认对象stu_d_df,将其绑定到student_info表的“院系”列上,使其默认值为“信息院”,对student_info表进行插入操作,操作完成后,删除该默认对象。
(7)在studentsdb数据库中用CREATETABLE语句创建表stu_con,并同时创建约束。
①创建表的同时创建约束。
表结构如图1-12所示。
图1-12要创建的表的结构
约束要求如下:
将学号设置为主键(PRIMARYKEY),主键名为pk_sid。
为姓名添加唯一约束(UNIQUE),约束名为uk_name。
为性别添加默认约束(DEFAULT),默认名称为df_sex,其值为“男”。
为出生日期添加属性值约束(CHECK),约束名为ck_bday,其检查条件为:
出生日期>
'
1988-1-1'
②在stu_con表中插入如表1-1所示的数据记录。
表1-1在stu_con表中插入的数据
学号
姓名
性别
出生日期
家庭住址
0009
张小东
1989-4-6
0010
李梅
女
1983-8-5
0011
王强
1988-9-10
0012
1989-6-3
分析各约束在插入记录时所起的作用,查看插入记录后表中数据与所插入的数据是否一致?
③使用ALTERTABLE语句的DROPCONSTRAINT参数项在查询设计器中删除为stu_con表所建的约束。
(8)用SQLServer管理平台完成实验内容7的所有设置。
(9)在查询设计器中,为studentsdb数据库的grade表添加外键约束(FOREIGNKEY),要求将“学号”设置为外键,参照表为student_info,外键名称为fk_sid。
①使用系统存储过程sp_help查看grade表的外键信息。
②在grade表中插入一条记录,学号为0100,课程编号为0001,分数为78。
观察SQLServer会做何处理,为什么?
如何解决所产生的问题?
③使用查询设计器删除grade表的外键fk_sid。
三、实验结果
1.为studentsdb数据库创建一个规则,限制所输入的数据为7位0~9的数字。
(1)复制学生表命名为stu_phone,在stu_phone表中插入一列,列名为“电话号码”。
SELECT*INTOstu_phoneFROM学生表
ALTERTABLEstu_phoneADD电话号码CHAR(7)NULL
(2)创建一个规则phone_rule,限制所输入的数据为7位0~9的数字
createrulephone_rule
as@电话号码like'
(3)使用系统存储过程sp_bindrule将phone_rule规则绑定到stu_phone表的“电话号码”列上。
sp_bindrulephone_rule,'
stu_phone.电话号码
(4)输入以下代码,进行一次插入操作:
修改:
INSERT
INTO
stu_phone(学号,姓名,电话号码)VALUES('
1234567'
)
phone_rule规则可以对其他操作进行规则检查
2.创建一个规则stusex_rule,将其绑定到stu_phone表的“性别”列上,保证输入的性别值只能是“男”或“女”。
createrulestusex_rule
as@性别in('
男'
女'
3.使用系统存储过程sp_help查询stusex_rule规则列表,使用sp_helptext查询stusex_rule规则的文本,使用sp_rename将stusex_rule规则更名为stu_s_rule。
sp_helpstusex_rule
Sp_helptextstusex_rule
sp_rename
stusex_rule,stu_s_rule
4.删除stu_s_rule规则。
drop
rule
stu_s_rule
注意:
stu_s_rule为stusex_rule更名后规则名,是否仍然绑定在stu_phone表的“性别”列上,应如何操作才能删除它。
5.在studentdb数据库中,建立日期、货币和字符等数据类型的默认对象。
(1)创建默认对象df_date、df_char、df_money。
创建日期型默认对象df_date,默认日期为2006-4-12。
CREATEDEFAULTdf_date
2006-4-12'
创建字符型默认对象df_char,默认字符为“unknown”
as'
创建货币型默认对象df_money,默认为100元
CREATEDEFAULTdf_money
AS‘$100’
(2)输入以下代码,在studentsdb数据库中创建stu_fee数据表。
(3)使用系统存储过程sp_bindehult将默认对象df_date、df_char、df_money分别绑定在stu_fee表的“学费”、“交费日期”、“电话号码”列上。
sp_bindefaultdf_money,'
sp_bindefaultdf_date,'
(4)输入命令,在stu_fee表进行插入操作:
(学号,姓名)values('
,’刘卫平’)
INSERTINTOstu_fee(学号,姓名)values('
(学号,姓名,学费)values('
,’张卫民’,$120)
INSERTINTOstu_fee(学号,姓名,学费)values('
(学号,姓名,学费,交费日期)values('
,‘马东‘,$110,’2006-5-12‘)
INSERTINTOstu_fee(学号,姓名,学费,交费日期)
VALUES('
$110,'
分析stu_fee表中插入记录的各列的值是什么?
(5)完成以下代码解除默认对象df_char、df_date、df_money的绑定,并删除之。
sp_unbindefault
drop
DEFAULT
df_char
Go
df_date
go
df_money
6.为学生表添加一列,命名为“院系”,创建一个默认对象stu_d_df,将其绑定到学生表的“院系”列上,使其默认值为“信息院”,对学生表进行插入操作,操作完成后,删除该默认对象。
1)
alter
table
学生表
add
院系varchar(8)
2)create
default
stu_d_df
as
信息院'
go
sp_bindefault
学生表.院系'
(3)sp_unbindefault
7.在studentsdb数据库中用CREATETABLE语句创建表stu_con,并同时创建约束。
(1)创建表的同时创建约束。
①将学号设置为主键(PRIMARYKEY),主键名为pk_sid。
②为姓名添加唯一约束(UNIQUE),约束名为uk_name。
③为性别添加默认约束(DEFAULT),默认名称为df_sex,其值为“男”
④为出生日期添加属性值约束(CHECK),约束名为ck_bday,其检查条件为:
1988-1-1’。
CREATETABLEstu_con
(学号char(4),
姓名char(8),
性别char
(2),
出生日期datetime,
家庭住址varchar(50),
constraint
PK_sid
PRIMARY
KEY(学号),
uk_name
UNIQUE(姓名),
ck_bday
check(出生日期>
),
stu_con
df_sex
FOR
(2)在stu_con表中插入如表1-1所示的数据记录。
stu_con
(学号,姓名,出生日期)
values('
张小东'
1989-4-6'
0010'
李梅'
1983-8-5'
消息547,级别16,状态0,第1
行
语句与CHECK
约束"
ck_bday"
冲突。
该冲突发生于数据库"
studentsdb"
,表"
dbo.stu_con"
column
出生日期'
0011'
王强'
1988-9-10'
0012'
1989-6-3'
消息2627,级别14,状态1,第1
违反了UNIQUE
KEY
约束'
uk_name'
不能在对象'
dbo.stu_con'
中插入重复键。
语句已终止
(3)使用ALTER
TABLE语句的DROP
CONSTRAINT参数项在查询分析器中删除为stu_con表所建的约束。
df_sex,uk_name,pk_sid,ck_bday
8.用SQL
Server管理平台完成实验内容7的所有设置。
9.在查询设计器中,为studentsdb数据库的grade表添加外键约束(FOREIGNKEY),要求将“学号”设置为外键,参照表为student_info,外键名称为fk_sid。
(1)alter
grade
fk_sid
FOREIGN
KEY(学号)references
student_info(学号)
sp_help
(2)
insert
grade
values
('
0100'
78'