实验4 数据库完整性控制

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

注意:为了节约大家的宝贵时间,因此给出题目时,会在一定程度上给出相关的语句,大家只需要补充完善相关的SQL语句即可。

实验四数据库完整性控制

一、实验目的

1.掌握使用T-SQL定义实体完整性的方法。

2. 了解SQL Server违反实体完整性处理措施。

3. 理解参照完整性的含义。

4. 熟练掌握建立外键的方法。

5. 掌握利用FOREIGN KEY…REFERENCES子句以及各种约束保证参照完整性。

6.掌握利用短语NOT NULL、UNIQUE、CHECK保证域完整性。

7. 熟练掌握约束、规则实施用户自定义完整性

8.掌握创建触发器的方法,掌握利用触发器规范插入、更新、删除操作的方法。

二、实验内容

1、新建数据库School并创建学生表Student,包含以下属性:Sno (CHAR(5))、Sname (CHAR(8))、Ssex (CHAR(1))、Sage (INT)、Sdept (CHAR(20)),

并插入数据:( '10000','王敏','F',23,'CS'),('10000','王浩','M',25,'EE'),

创建数据库、表以及插入数据的相关语句为:

CREATE DATABASE School ;

USE School

CREATE TABLE Student(

Sno CHAR(5),

Sname CHAR(8),

Ssex CHAR(1),

Sage INT,

Sdept CHAR(20));

INSERT INTO Student values ( '10000','王敏','F',23,'CS');

INSERT INTO Student values ('10000','王浩','M',25,'EE');

执行完上述语句后查看数据库中student表中的数据。

然后再添加约束:令Sno为主键,查看结果并分析原因。验证当与现有的数据环境不等时,无法建立实体完整性。

最后,请大家删除该student表,直接在定义表时给出实体完整性约束,要求给出把主键定义在表级和列级两种方法。定义好表结构后,再执行如下两条插入语句,INSERT INTO Student values ( '10000','王敏','F',23,'CS');

INSERT INTO Student values ('10000','王浩','M',25,'EE');

列级:

USE School

CREATE TABLE Student(

Sno CHAR(5) primary key,

Sname CHAR(8),

Ssex CHAR(1),

Sage INT,

Sdept CHAR(20))

表级:

USE School

CREATE TABLE Student(

Sno CHAR(5),

Sname CHAR(8),

Ssex CHAR(1),

Sage INT,

Sdept CHAR(20)

primary key (Sno))

分析违反实体完整性时,系统给出了何种处理。并将王浩的学号改为10001重新插入。

请参照实验教材P52-55实验3.1。

2、验证多重级联删除。在数据库School中新建StudentCard表,包含以下属性:CardID (char(14))、Sno(char (5))、RemainedMoney (decimal (10,2)),令CardID为其主键,令Sno为参照Student表的外键,级联删除,并插入数据;新建ICBCCard表,包含以下属性:BankID (char(20))、CardID (char (14))、RestoredMoney (decimal (10,2)),令BankID为主键,令CardID 为参照StudentCard表的外键,级联删除,并插入数据。

本题大家可以在如下语句上进行完善:

CREATE TABLE StudentCard(

CardID char(14),

Sno char (5),

RemainedMoney decimal (10,2)

);

INSERT INTO StudentCard V ALUES ( '05212567', '10001',120.00);

INSERT INTO StudentCard V ALUES ( '05212302', '10000',130.50);

CREATE TABLE ICBCCard(

BankID char(20),

CardID char (14),

RestoredMoney decimal (10,2),

);

INSERT INTO ICBCCard V ALUES ( '9558844022312','05212302',125000.3);

INSERT INTO ICBCCard V ALUES ( '9558844023645','05212567',150000.4);

注意:请大家在建立外键时,StudentCard表的外键建立的列级,ICBCCard表建立在表级。

再执行以下语句:

INSERT INTO StudentCard V ALUES ( '05212568', '10002',120.00);

观察会发生什么?为什么?

3.通过删除Student表中的一条记录。

Delete From Student where Sno=’10000’

然后再查询StudentCard、ICBCCard表中的数据,观察发生了什么?

第2和3题请参照实验教材P55-61实验3.2。

4. 在数据库School中新建Director表,包含以下属性:Dno (CHAR(5))、Dname (CHAR(8))、Dsex (CHAR(1))、Dage (INT)、Ddept (CHAR(20)),并自定义3个约束U1、U2和U3,其中U1规定Dno字段不允许取空,U2规定Dage属性的值必须<=55,U3规定Ddept 属性的值唯一。

相关文档
最新文档