搜索
您的当前位置:首页正文

数据库系统概论实验

来源:二三娱乐
10软件1班 22号 周超

实验八

一、实验内容

以SPJ数据库为例,完成以下要求 1、 定义S、P、J、SPJ实体完整性 2、 表间的参照完整性 3、 用户定义完整性

二、实验过程

1、 SQL定义各表

SQL:

CREATE DATABASE SPJ ON(NAME='SPJ_DATA', FILENAME='E:\\SPJ.mdf', SIZE=5MB, FILEGROWTH=10%) USE SPJ

CREATE TABLE S

(SNO CHAR(4) PRIMARY KEY, SNAME CHAR(20) UNIQUE,

STATUS INT CHECK (STATUS>=10 AND STATUS<=50), CITY CHAR (20) NOT NULL); CREATE TABLE P

(PNO CHAR(4) PRIMARY KEY, PNAME CHAR(20) NOT NULL, COLOR CHAR (10) NOT NULL, WEIGHT SMALLINT NOT NULL); CREATE TABLE J

(JNO CHAR(4) PRIMARY KEY, JNAME CHAR(20) UNIQUE, CITY CHAR(20) NOT NULL); CREATE TABLE SPJ (SNO CHAR(4), PNO CHAR(4), JNO CHAR(4), QTY INT NOT NULL,

PRIMARY KEY(SNO,PNO,JNO),

FOREIGN KEY(SNO) REFERENCES S(SNO), FOREIGN KEY (PNO) REFERENCES P(PNO),

FOREIGN KEY (JNO) REFERENCES J(JNO));

附表:S表

P表

SPJ表

J表

2、(举例,违反3类完整性)

2.1、违反实体完整性(记下出错提示) 1、主码值不唯一

在J表中插入如下数据时

INSERT INTO J

VALUES ('J1','三建','北京'); INSERT INTO J

VALUES ('J1','一汽','长春');

会出现提示错误:消息2627,级别14,状态1,第1 行

违反了PRIMARY KEY 约束'PK__J__0425A276'。不能在对象'dbo.J' 中插入重复键。 语句已终止。

2、主码属性值为空

在J表中插入以下数据时

INSERT INTO J

VALUES (null,'无线电厂','常州');

出现错误提示:

消息515,级别16,状态2,第1 行

不能将值NULL 插入列'JNO',表'SPJ.dbo.J';列不允许有空值。INSERT 失败。 语句已终止。

2.2、违反参照完整性(记下出错提示) 1.在参照表中插入元组 在SPJ表中插入如下数据 INSERT INTO SPJ

VALUES('S6','P1','J1','200'); 出现提示错误:

消息547,级别16,状态0,第1 行

INSERT 语句与FOREIGN KEY 约束\"FK__SPJ__SNO__1CF15040\"冲突。该冲突发生于数据库\"SPJ\",表\"dbo.S\。 语句已终止。

2.在参照表中修改外码值

在SPJ表中修改数据,输入如下SQL语句 UPDATE SPJ SET SNO='S6'

WHERE SNO='S1'; 出现提示错误:

消息547,级别16,状态0,第1 行

UPDATE 语句与FOREIGN KEY 约束\"FK__SPJ__SNO__1CF15040\"冲突。该冲突发生于数据库\"SPJ\",表\"dbo.S\。 语句已终止。

3.在被参照表中删除元组

在J表中删除元组,输入如下语句并执行 DELETE FROM J

WHERE JNO='J2'; 出现提示错误:

消息547,级别16,状态0,第1 行

DELETE 语句与REFERENCE 约束\"FK__SPJ__JNO__1ED998B2\"冲突。该冲突发生于数据库\"SPJ\",表\"dbo.SPJ\。 语句已终止。

4.在被参照表中修改外码值

在P表中修改数据,输入如下语句 UPDATE p SET PNO='P7'

WHERE PNO='P5'; 出现提示错误:

消息547,级别16,状态0,第1 行

UPDATE 语句与REFERENCE 约束\"FK__SPJ__PNO__1DE57479\"冲突。该冲突发生于数据库\"SPJ\",表\"dbo.SPJ\。 语句已终止。

2.3、违反用户定义完整性(记下出错提示)

1、违反列值非空

在J 表中插入以下数据时

INSERT INTO J1

VALUES ('J7','半导体厂',null);

出现错误提示:

消息515,级别16,状态2,第1 行

不能将值NULL 插入列'CITY',表'SPJ.dbo.J1';列不允许有空值。INSERT 失败。 语句已终止。

原因:在建表时已把列CITY定义为NOT NULL 2、违反列值唯一

在P表中插入如下数据时会出现以下提示错误

INSERT INTO J

VALUES ('J1','三建','北京'); INSERT INTO J

VALUES ('J2','三建','长春');

出现提示错误:

消息2627,级别14,状态1,第4 行

违反了UNIQUE KEY 约束'UQ__J__0519C6AF'。不能在对象'dbo.J' 中插入重复键。 语句已终止。

3.违反列值满足布尔表达式 在S表中插入如下数据

INSERT INTO S1

VALUES ('S1','精益','60','天津');

出现提示错误:消息547,级别16,状态0,第1 行

INSERT 语句与CHECK 约束\"CK__S1__STATUS__1CF15040\"冲突。该冲突发生于数据库\"SPJ\",表\"dbo.S1\。 语句已终止。

原因:列STATUS已定义为STATUS INT CHECK (STATUS>=10 AND STATUS<=50),取值不

能超过50.

三、遇到的问题 四、原因及解决方法

因篇幅问题不能全部显示,请点此查看更多更全内容

Top