数据库系统概论实验
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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