数据库系统概论实验

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

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

V ALUES('S6','P1','J1','200');

出现提示错误:

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

INSERT 语句与FOREIGN KEY 约束"FK__SPJ__SNO__1CF15040"冲突。该冲突发生于数据库"SPJ",表"dbo.S", column 'SNO'。

语句已终止。

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

在SPJ表中修改数据,输入如下SQL语句

UPDATE SPJ

SET SNO='S6'

WHERE SNO='S1';

出现提示错误:

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

UPDA TE 语句与FOREIGN KEY 约束"FK__SPJ__SNO__1CF15040"冲突。该冲突发生于数据库"SPJ",表"dbo.S", column 'SNO'。

语句已终止。

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

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

DELETE

FROM J

WHERE JNO='J2';

出现提示错误:

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

DELETE 语句与REFERENCE 约束"FK__SPJ__JNO__1ED998B2"冲突。该冲突发生于数据库"SPJ",表"dbo.SPJ", column 'JNO'。

语句已终止。

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

在P表中修改数据,输入如下语句

UPDATE p

SET PNO='P7'

WHERE PNO='P5';

出现提示错误:

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

UPDA TE 语句与REFERENCE 约束"FK__SPJ__PNO__1DE57479"冲突。该冲突发生于数据库"SPJ",表"dbo.SPJ", column 'PNO'。

语句已终止。

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

相关文档
最新文档