数据库系统概论实验.doc
文本预览下载声明
10软件1班 22号 周超
实验八
一、实验内容
以SPJ数据库为例,完成以下要求
定义S、P、J、SPJ实体完整性
表间的参照完整性
用户定义完整性
二、实验过程
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 中插入重复键。
语句已终止。INSERT
INTO J
VALUES (null,无线电厂,);
出现错误提示:
消息515,级别16,状态2,第1 行
不能将值NULL 插入列JNO,表SPJ.dbo.J;列不允许有空值。INSERT 失败。
语句已终止。INSERT
INTO SPJ
VALUES(S6,P1,J1,200);
出现提示错误:
消息547,级别16,状态0,第1 行
INSERT 语句与FOREIGN KEY 约束FK__SPJ__SNO__1CF15040冲突。该冲突发生于数据库SPJ,表dbo.S, column SNO。
语句已终止。UPDATE SPJ
SET SNO=S6
WHERE SNO=S1;
出现提示错误:
消息547,级别16,状态0,第1 行
UPDATE 语句与FOREIGN KEY 约束FK__SPJ__SNO__1CF15040冲突。该冲突发生于数据库SPJ,表dbo.S, column SNO。
语句已终止。DELETE
FROM J
WHERE JNO=J2;
出现提示错误:
消息547,级别16,状态0,第1 行
DELETE 语句与REFERENCE 约束FK__SPJ__JNO__1ED998B2冲突。该冲突发生于数据库SPJ,表dbo.SPJ, column JNO。
语句已终止。UPDATE p
SET PNO=P7
WHERE PNO=P5;
出现提示错误:
消息547,级别16,状态0,第1 行
UPDATE 语句与REFERENCE 约束FK__SPJ__PNO__1DE57479冲突。该冲突发生于数据库SPJ,表dbo.SPJ, column PNO。
语句已终止。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__0
显示全部