数据库系统原理 实验(实习)报告——数据完整性

这篇实验报告详细介绍了如何使用SQL Server实现数据完整性,包括NOT NULL、PRIMARY KEY、CHECK、FOREIGN KEY、DEFAULT和UNIQUE约束的创建与应用。通过实例展示了违反和满足这些约束的插入和更新操作,以及如何增加和删除约束。

一、实验目的

1、掌握SQL Server的6 类约束:NOT NULL、PRIMARY KEY、CHECK、FOREIGN KEY、DEFAULT 和UNIQUE 的使用方法,在创建表时用相应的约束描述实体完整性、参照完整性和用户定义完整性。

2、掌握增加和删除约束的方法。

二、实验内容与步骤

1、完成教材实验9实验内容1、2、3。

语句:

USE StudentCourse1

GO

CREATE TABLE Student

(学号 CHAR(6) PRIMARY KEY,

姓名 CHAR(12) NOT NULL CONSTRAINT name_unique UNIQUE,

专业名 VARCHAR(20),

性别 CHAR(2) NOT NULL CONSTRAINT gen_Check CHECK(性别='' OR 性别=''),

出生时间 SMALLDATETIME,

总学分 INT CONSTRAINT tot_Check CHECK(总学分>=0),

备注 TEXT

)

GO

CREATE TABLE Course

(课程号 CHAR(4) PRIMARY KEY,

课程名 VARCHAR(40) NOT NULL,

开课学期 INT CONSTRAINT Sem_Check CHECK(开课学期 BETWEEN 1 AND 8),

学时 INT CONSTRAINT Tm_Check CHECK(学时>=0),

学分 INT CONSTRAINT Score_Check CHECK(学分>=0)

)

GO

CREATE TABLE StuCourse

(学号 CHAR(6) NOT NULL,

课程号 CHAR(4) NOT NULL,

成绩 INT CONSTRAINT Grade_Check CHECK (成绩>=0),

PRIMARY KEY(学号,课程号),

FOREIGN KEY(学号) REFERENCES Student(学号),

FOREIGN KEY(课程号) REFERENCES Course(课程号)

)

GO

结果:

2、对6 类数据约束进行验证

实体完整性:

(1)PRIMARY KEY

用insert语句分别对Student表(或者Course表)插入三条记录(具体数据自行设计),观察执行结果。

Student表

  • 主码重复的记录

语句:

INSERT INTO Student

VALUES('070101','丁二平','计算机科学与技术','','1985-5-30',80,'三好生')

结果:

②主码为空的记录

语句:

INSERT INTO Student

VALUES(NULL,'丁二平','计算机科学与技术','','1985-5-30',80,'三好生')

结果:

③满足主码约束的记录

语句:

INSERT INTO Student

VALUES('070100','丁二平','计算机科学与技术','','1985-5-30',80,'三好生')

结果:

参照完整性:

(2)FOREIGN KEY 

用insert语句(或者update语句)对StuCourse表进行更新操作(具体数据自行举例),观察执行结果。

StuCourse表:

①外码为null的情况

语句:

INSERT INTO StuCourse

VALUES(NULL,'1001',75)

结果:

②外码取值不在被参照主码的取值范围内的情况

语句:

INSERT INTO StuCourse

VALUES('070001','1001',100)

结果:

③外码取值在被参照主码的取值范围内的情况

语句:

INSERT INTO StuCourse

VALUES('070101','3001',100)

结果:

用户定义完整性:

下面4类约束可以选择某个表中带有对应约束的列,使用insert语句(或者update语句)进行更新操作,观察执行结果。

(3)NOT NULL

①违反约束的情况

语句:

INSERT INTO Course

VALUES('1000',NULL,1,64,3)

结果:

②满足约束的情况

语句:

INSERT INTO Course

VALUES('1000','数据库',1,64,3)

结果:

(4)UNIQUE

①违反约束的情况

语句:

INSERT INTO Student

VALUES('070203','朱江','电子信息工程','男','1988-12-30',80,NULL)

结果:

②满足约束的情况

语句:

INSERT INTO Student

VALUES('070200','dddd','电子信息工程','男','1989-7-1',64,'多次获奖学金')

结果:

(5)DEFAULT

①给定具体属性值的情况

语句:

INSERT INTO Course

VALUES('1004','数据库',1,64,3)

结果:

②没有给定具体属性值的情况

语句:

INSERT INTO Course(课程号,课程名,开课学期,学时)

VALUES('1005','计算机组成原理',2,64)

结果:

(6)CHECK

①违反约束的情况

语句:

INSERT INTO Student

VALUES('070301','朱平','计算机科学与技术','0','1990-1-10',64,NULL)

结果:

②满足约束的情况

语句:

INSERT INTO Student

VALUES('070301','朱平','计算机科学与技术','','1990-1-10',64,NULL)

结果:

3、完成思考与练习1、2。

提示:增加默认值约束语法格式:

alter table 表名 add constraint 约束名字 DEFAULT 默认值 for 字段名称

(1)语句:

ALTER TABLE Course ADD CONSTRAINT Xuefen_default DEFAULT 2 FOR 学分

结果:

(2)SQL语句如下:

ALTER TABLE StuCourse

DROP CONSTRAINT Grade_Check

GO

ALTER TABLE StuCourse

ADD CONSTRAINT Grade_Check

CHECK(成绩>=0 AND 成绩<=100)

GO

结果:

1、 Find the name, loan number and loan amount of all customers; rename the column name loan_number as loan_id. 2、 Find the names of all customers whose street includes the substring “Main”. 3、Find all customers who have a loan, an account, or both: 4、Find all customers who have both a loan and an account. 5、Find all customers who have an account but no loan. 6、Find the average account balance at the Perryridge branch. 7、 Find the number of tuples in the customer relation. 8、 Find the number of depositors in the bank. 9、 Find the number of depositors for each branch. 10、Find the names of all branches where the average account balance is more than $1,200. 11、Find all loan number which appear in the loan relation with null values for amount. 12、Find all customers who have both an account and a loan at the bank. 13、Find all customers who have a loan at the bank but do not have an account at the bank 14、Find all customers who have both an account and a loan at the Perryridge branch 15、Find all branches that have greater assets than some branch located in Brooklyn. 16、Find the names of all branches that have greater assets than all branches located in 1、创建一个School数据库,该数据库的主数据文件逻辑名称为SCHOOL_data,物理文件名为School.mdf,初始大小为10MB,最大尺寸为无限大,增长速度为10%;数据库的日志文件逻辑名称为School_log,物理文件名为School.ldf,初始大小为1MB,最大尺寸为5MB,增长速度为1MB。 2、用SQL语句建立上述表,自定义主键和外键,对于student表建立约束条件:ssex仅能取male或female;sage在18和22之间。并完成下面的查询语句。 1、查询所有选修过“Bibliometrics”课的学生的姓名和成绩; 2、查询考试成绩不及格的学生的个数; 3、查询名字中至少含有一个“z”字符的学生的姓名、学号和性别; 4、查询选修了“Introduction to the Internet”课程的学生的学号及其成绩,查询结果按分数的降序排列; 5、查询“Zuo li”同学选修课程的总学时(time)数 6、查询年龄不大于20岁的学生的平均考试成绩; 7、查询 “computer science”专业学生选修 “Database System”的人数; 8、查询同时选修课程“Database System”和“Introduction to the Internet”的学生姓名; 9、查询选修的课程中含有“Wang gang”同学所有选修课程的学生姓名。 10、查询“Information Technology for Information Management”考试成绩为空的学生姓名及专业名称。 11、查询“computer science”专业学生每个人的选修课总学分。 12、查询个人考试平均成绩高于专业平均成绩的学生姓名 13、查询个人考试平均成绩高于女生平均成绩的男生姓名 14、查询比“computer science”专业所有学生年龄都大的学生姓名。 15、查询考试成绩仅有一科不及格学生姓名
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值