实验10 SQL Server 2000数据完整性
20102805013 陈尧
一、 实验目的
1. 了解约束的应用对数据完整性控制的作用。
2. 掌握应用企业管理器设置、修改和删除常见约束的方法。 3. 掌握应用T-SQL设置、修改和删除常见约束的方法。
二、 实验要求
1. 在样例数据库中管理相关约束。 2. 保存并上交实验结果。
三、 实验步骤
1. 使用不带约束(参考附录D)的脚本创建eshop数据库。(T-SQL)
2. 使用修改表命令将members表的m_address设置为非空,添加如下记录,体会NOT
NULL约束的
使用。
‘wenh’,‘翁红’,‘男’,‘1970-04-20’,NULL,5500.0,‘888888’
首先,在查询分析器中输入更新数据表members的SQL代码:
再按F5或点击工具栏上的运行按钮“入记录到数据
表members的SQL代码:
USE eshop
”,运行更新数据表的SQL代码,然后输入插
INSERT INTO members
VALUES('wenh','翁红','男','1970-04-20',NULL,5500.0,'888888')
执行此段SQL插入记录代码后,将在结果框中显示以下消息,表示执行插入操作失败:
服务器: 消息 515,级别 16,状态 2,行 1
无法将 NULL 值插入列 'm_address',表 'eshop.dbo.members';该列不允许空值。INSERT 失败。 语句已终止。
3. 在members表中,将m_account设置为主键,并查看对应的索引(?),添加如下
记录,体会PRIMARY KEY约束的作用。 ‘liuzc518’,‘翁红’,‘男’,‘1970-04-20’,‘湖南株洲’,5500.0,‘123456’ 首先,在查询分析器中输入更新数据表members的SQL代码: USE eshop
ALTER TABLE members
ADD CONSTRAINT pk_members PRIMARY KEY(m_account)
再按F5或点击工具栏上的运行按钮“”,运行更新数据表的SQL代码,然后输入插入记录到数据
表members的SQL代码:
USE eshop
INSERT INTO members
VALUES('liuzc518','翁红','男','1970-04-20', '湖南株洲',5500.0,'123456')
执行此段SQL插入记录代码后,将在结果框中显示以下消息,表示执行插入操作失败: 服务器: 消息 2627,级别 14,状态 1,行 1 违反了 PRIMARY KEY 约束 'pk_members'。不能在对象 'members' 中插入重复键。 语句已终止。
4. 在members表中,为m_name增加UNIQUEL约束,添加如下记录再输入一条会
员姓名为“津津
有味”的记录,体会UNIQUE约束的作用。
‘jjyw’,‘津津有味’,‘男’,‘1970-04-20’,‘湖南株洲’,5500.0,‘jjyw’ 首先,在查询分析器中输入更新数据表members的SQL代码: USE eshop
ALTER TABLE members
ADD CONSTRAINT un_name UNIQUE(m_name)
再按F5或点击工具栏上的运行按钮“”,运行更新数据表的SQL代码,然后输入插入记录到数据
表members的SQL代码:
USE eshop
INSERT INTO members
VALUES('jjyw ','津津有味','男','1970-04-20', '湖南株洲',5500.0,'jjyw ')
执行此段SQL插入记录代码后,将在结果框中显示以下消息,表示执行插入操作失败: 服务器: 消息 2627,级别 14,状态 2,行 1
违反了 UNIQUE KEY 约束 'un_name'。不能在对象 'members' 中插入重复键。 语句已终止。
5. 在members表中,为会员增加CHECK约束为:
(1) 性别只能为男或女
(2) 年龄在15到60岁之间。
再分别添加如下两条记录,体会CHECK的约束的作用。(T-SQL) ‘liuzh’,‘刘忠怀’,‘工’,‘1960-04-20’,‘湖南株洲’,3000.0,‘liuzh’ ‘liujj’,‘刘津津’,‘女’,‘1997-04-14’,‘湖南株洲’,4400.0,‘liujj’ 首先,在查询分析器中依次输入两条更新数据表members的SQL代码: USE eshop
ALTER TABLE members
ADD CONSTRAINT ck_sex CHECK(m_sex IN('男', '女'))
USE eshop
ALTER TABLE members
ADD CONSTRAINT ck_age CHECK( (YEAR(GETDATE())-YEAR(m_birth)) BETWEEN 15 AND 60)
再按F5或点击工具栏上的运行按钮“”,运行更新数据表的SQL代码,然后输入第一条插入记录
到数据表members的SQL代码:
USE eshop
INSERT INTO members
VALUES('liuzh','刘忠怀','男','1960-04-20', '湖南株洲',3000.0,'liuzh ') 执行此段SQL插入记录代码后,将在结果框中显示以下消息,表示执行插入操作失败: 服务器: 消息 2627,级别 14,状态 1,行 1 违反了 PRIMARY KEY 约束 'pk_members'。不能在对象 'members' 中插入重复键。 语句已终止。
再按F5或点击工具栏上的运行按钮“”,运行更新数据表的SQL代码,然后输入第二条插入记录
到数据表members的SQL代码:
USE eshop
INSERT INTO members
VALUES('liujj','刘津津','女','1999-04-14', '湖南株洲',4400.0,'liujj ')
执行此段SQL插入记录代码后,将在结果框中显示以下消息,表示执行插入操作失败: 服务器: 消息 547,级别 16,状态 1,行 1
INSERT 语句与 COLUMN CHECK 约束 'ck_age' 冲突。该冲突发生于数据库 'eshop',表 'members', column 'm_birth'。 语句已终止。
注:由于今年为2012年,所以将记录改成1999-04-14可以出现以下效果。
6. 在members表和orders表之间创建关系,并将orders表的m_accout设置为外键,
体会FOREIGN
KEY约束的作用。
USE eshop
ALTER TABLE orders
ADD CONSTRAINT fk_account FOREIGN KEY(m_account) REFERENCES members(m_account)
7. 为members表中的“性别”设置默认值为“女”,然后添加两条记录,体会DEFAULT
约束的作用。(T-SQL)
USE eshop
insert into members
values('mjj','模家具',' ','1991-11-15','广州番禺',9999.0,'121222')
8. 依次删除以上约束。(T-SQL)
ALTER TABLE members
DROP CONSTRAINT pk_members
ALTER TABLE members
DROP CONSTRAINT un_name
ALTER TABLE members DROP CONSTRAINT ck_sex
ALTER TABLE members DROP CONSTRAINT ck_age
ALTER TABLE orders
DROP CONSTRAINT fk_account
9. 将步骤1-8命令脚本(CHECK01.SQL)保存上交以备教师检查。
四、 注意事项
1. 列约束与表约束的区别。
2. 各类约束实现数据完整性的方法。