数据库实验

一、表、索引、视图的创建

实验题目:数据定义
实验目和要求:

  1. 掌握数据表的创建,修改,删除的方法
  2. 熟悉常用数据类型
  3. 掌握索引的创建,删除。通过实验理解唯一索引,聚簇索引
  4. 掌握视图的概念,视图的创建和删除
  5. 掌握利用视图进行数据查询的方法

实验步骤:

  1. 按实验内容要求完成各项操作
  2. 根据题目要求给出解决方案
  3. 提交实验报告

实验内容:

  1. 数据表的建立
    建立s,c,sc三章数据表,并给每个属性定义合适数据类型,声明主外码
CREATE TABLE Student
(
    Sno CHAR(9) PRIMARY KEY,
    Sname CHAR(20) UNIQUE,
    Ssex CHAR(2),
    Sage SMALLINT,
    Sdept CHAR(20)
);
CREATE TABLE Course
(
    Cno CHAR(4) PRIMARY KEY,
    Cname CHAR(40) NOT NULL,
    Cpno CHAR(4),
    Ccredit SMALLINT,
    FOREIGN KEY(Cpno) REFERENCES Course(Cno)
);
CREATE TABLE SC
(
    Sno CHAR(9),
    Cno CHAR(4),
    Grade SMALLINT,
    PRIMARY KEY( Sno, Cno),
    FOREIGN KEY(Sno) REFERENCES Student(Sno),
    FOREIGN KEY(Cno) REFERENCES Course(Cno)
);
 INSERT  INTO Student(Sno,Sname,Ssex,Sdept,Sage) VALUES( '201215121', '李勇', '男', '20', 'CS'),
                      ( '201215122', '刘晨', '女', '19', 'CS'),
                      ( '201215123', '王敏', '女', '18', 'MA'),
                      ( '201215125', '张立', '男', '19', 'IS');
 INSERT  INTO Course(Cno,Cname,Cpno,Ccredit) VALUES( '1', '数据库', '5', '4'),
                      ( '2', '数学', '', '2'),
                      ( '3', '信息系统', '1', '4'),
                      ( '4', '操作系统', '6', '3'),
                      ( '5', '数据结构', '7', '4'),
                      ( '6', '数据处理', '', '2'),
                      ( '7', 'PASCAL语言', '6', '4');
 INSERT  INTO SC(Sno,Cno,Grade) VALUES( '201215121', '1', '92'),
                       ( '201215121', '2', '85'),
                       ( '201215121', '3', '88'),
                       ( '201215122', '2', '90'),
                       ( '201215122', '3', '80');
  1. 数据表的修改
    给c表增加字段teacher
ALTER TABLE Course
ADD Cteacher CHAR(20);
  1. 数据表的删除
    建立一个表名为test的表,并删除
CREATE TABLE Test
(
    CNO CHAR(20),
    GRADE SMALLINT,
);
DROP TABLE Test;
  1. 数据表的索引建立和删除
  • 为s表的sname字段建立唯一索引
CREATE CLUSTER INDEX Sname ON Student(Sname);
  • 为s表的sdept建立聚簇索引
CREATE CLUSTERED INDEX Ssdept ON Student(Sdept);
  • 删除s表的唯一索引
DROP INDEX Student.Sname;
  1. 视图的建立、删除和查询
  • 建立一个计算机系学生基本信息视图CSV(SNO,SNAME,SEX,AGE)
go
CREATE VIEW CSV
AS
SELECT Sno,Sname,Ssex,Sage
FROM Student
WHERE Sdept = 'CS';
go
  • 在CSV视图中查询1983年以后出生的计算机系学生基本信息。
SELECT *
FROM CSV
WHERE Sage < (2020 - 1983);
  • 建立一个计算机系学生成绩视图JSGV(SNO,CNO,GRADE)。
go
CREATE VIEW JSGV(Sno,Cno,Grade)
AS
SELECT SC.Sno,SC.Cno,Grade
FROM Student,SC
WHERE Sdept = 'CS';
go
  • 在JSGV中查询计算机系学生选课多于3门的学生学号。
SELECT Sno
FROM JSGV
GROUP BY Sno
HAVING COUNT(*)>3;
  • JSGV中查询计算机系学生2号课不及格的学生学号和成绩。
SELECT Sno,Grade
FROM JSGV
WHERE Cno='2' AND Grade<60;
  • 删除CSV视图
DROP VIEW CSV;

二、数据表的查询

实验题目:数据表的查询
实验目和要求:

1)掌握SQL语句灵活的查询功能
2)熟悉SQL语言的基本查询,包括单表查询,分组统计查询,连接查询
3)掌握SQL的复杂查询,包括嵌套查询,集合查询
4)理解和掌握SQL查询语句各个子句的特点和作用,按照SQL语言规范写出具体的SQL查询语句并调试通过
实验步骤:
1)按实验内容要求完成各项操作
2)根据题目要求给出解决方案
3)交实验报告
实验内容:
1)查询学生的学号和所在系

SELECT Sno,Sdept
FROM Student;

2)查询管理系的学生所选修的课程和成绩

SELECT Cno,Grade
FROM Student,SC
WHERE Sdept = '管理系' AND Student.Sno=SC.Sno;

3)统计有学生选修的课程门数。

SELECT COUNT(DISTINCT Cno)
FROM SC
GROUP BY Cno;

4)统计HU老师所授每门课程的学生平均成绩。

SELECT AVG(Grade)
FROM SC,Course
GROUP BY Sno
WHERE Cteacher='HU' AND Course.Cno=SC.Cno;

5)统计所有选修人数多于20的课程号和选课人数,并按人数降序排列,若人数相等,则按课程号升序排列。

SELECT COUNT(Sno),Cno
FROM SC
GROUP BY Sno
HAVING COUNT(*)>20
ORDER BY Cno,COUNT(Sno) DESC;

6)检索所有缓考即成绩为NULL的同学学号、姓名和缓考课程号。

SELECT SC.Sno,Cno,Sname
FROM SC,Student
WHERE Grade=NULL AND SC.Sno=Student.Sno;

7)检索‘OS’课成绩高于该课平均成绩的同学学号。

SELECT SC.Sno
FROM SC,Course
WHERE SC.Cno=Course.Cno AND Cname='IO' 
						AND Grade>=(
                                    SELECT AVG(Grade)
                                    FROM SC,Course
                                    WHERE SC.Cno=Course.Cno AND Cname='IO'
                                                    );

8)检索计算机系女生的学号和姓名。

SELECT Sname,Sno
FROM Student
WHERE Sdept='CS' AND Ssex='女';

9)检索全体学生都选修的课程号和课程名。

SELECT Cname,Cno
FROM Course;

10)检索未选修任何课程的学生学号。

SELECT Sno
FROM SC,Course
WHERE SC.Cno=Course.Cno AND Course.Cno NOT IN (
                                                SELECT Cno
                                                FROM Course
                                                ); 

11)检索WANG老师所授课程号、课程名。

SELECT Cno,Cname
FROM Course
WHERE Cteacher LIKE '王%';

12)检索所有姓LI同学的基本信息。

SELECT *
FROM Student
WHERE Sname LIKE '李%';

13)检索选修‘DATABASE’课程的学生学号。

SELECT Sno
FROM SC,Course
WHERE Cname='数据库' AND Course.Cno=SC.Cno;

14)检索年龄介于LIPING同学年龄和28岁之间的学生基本信息。

SELECT Sno
FROM Student
WHERE Sage<28 AND Sage>(
                        SELECT Sage
                        FROM Student
                        WHERE Sname='李平'
                        );

15)检索至少选修了一门TIAN老师所授课程的学生姓名、学号。

SELECT SC.Sno,Sname
FROM SC,Course,Student
WHERE SC.Sno=Student.Sno AND Course.Cno=SC.Cno AND Course.Cno IN (
                                                                    SELECT COUNT(Cno)
                                                                    FROM Course
                                                                    WHERE Cteacher LIKE '田%'
                                                                    );

三、数据表的更新

实验题目:数据表的更新
实验目和要求:

1)掌握SQL语句的数据操纵功能
2)掌握SQL语言的数据插入,修改,删除操作
3)掌握与嵌套查询相结合的插入,删除,修改数据的SQL语句
实验步骤:
1)按实验内容要求完成各项操作
2)根据题目要求给出解决方案
3)提交实验报告
实验内容
 在学生表中插入一新生信息(‘200213808’,’HUJING’,’女’,22,’计算机’)

INSERT 
INTO Student(Sno,Sname,Ssex,Sage,Sdept) 
VALUES ( '200213808', '胡静', '女', '92','CS');

 新建一个学生平均成绩表spjcj,将学生的平均成绩插入到spjcj表中

CREATE TABLE spjcj
(
    Sno CHAR(10) PRIMARY KEY,
    AVG_Grade SMALLINT
);
INSERT 
INTO spjcj(Sno,AVG_Grade)
SELECT Sno,AVG(Grade)
FROM SC
GROUP BY Sno;

 删除数据库中学号为’200213801’的退学学生有关信息。

DELETE 
FROM Student
WHERE Sno='200213801';

 将计算机系学生2号课成绩全部提高5%。

UPDATE SC
SET Grade=Grade*1.05
WHERE Cno='2' AND Sno IN(
                        SELECT Sno
                        FROM Student
                        WHERE Sdept='CS'
                        );

 删除没有成绩的学生选课记录

DELETE
FROM SC
WHERE Sno IN(
            SELECT Sno
            FROM SC
            WHERE Grade=NULL
            );

四、数据库的完整性

实验题目:数据库的完整性
实验目的和要求:

  1. 掌握数据库的实体完整性约束定义,完整性检查及违约处理方式。
  2. 掌握数据库的参照完整性约束定义,完整性检查及违约处理方式。
  3. 掌握数据库的用户定义完整性约束定义,完整性检查及违约处理方式。
  4. 掌握触发器的定义及使用。
    实验步骤:
  5. 按实验内容要求完成各项操作
  6. 根据题目要求给出解决方案
  7. 提交实验报告
    实验内容:
    1.定义S, C表,定义实体完整性约束,定义学生的年龄在19到22岁之间,课程名唯一的约束
CREATE TABLE S
(
    Sno CHAR(10),
    Sname CHAR(10),
    Ssex CHAR(10),
    Sage SMALLINT CONSTRAINT C4 CHECK(Sage<22 AND Sage>19),
    Sdept CHAR(10),
    PRIMARY KEY NONCLUSTERED(Sno)
);
CREATE TABLE C
(
    Cno CHAR(10),
    Cname CHAR(10) UNIQUE,
    Ccredit CHAR(10),
    Cteacher CHAR(10),
    PRIMARY KEY NONCLUSTERED(Cno)
);
  1. 在C表中增加cpno字段,cpno字段为先修课号,定义cpno为外码,参照C表的cno,并定义当删除被参照表中相关记录时,要求违约处理方式为置空,当发生修改操作时,违约处理方式为级联。
CREATE TABLE C
(
    Cno CHAR(10),
    Cname CHAR(10) UNIQUE,
    Ccredit CHAR(10),
    Cteacher CHAR(10),
    Cpno CHAR(10),
    PRIMARY KEY NONCLUSTERED(Cno),
    FOREIGN KEY(Cpno) REFERENCES C(Cno)
    ON DELETE NO ACTION
    ON UPDATE CASCADE
);
  1. 定义SC表的实体集参照完整性约束,要求当其被参照表发生删除操作时,S表违约处理的方式为级联,当其被参照表发生修改操作时,违约处理的方式为拒绝。
CREATE TABLE SC
(
    Cno CHAR(10),
    Sno CHAR(10),
    Grade SMALLINT,
    PRIMARY KEY(Cno,Sno),
    FOREIGN KEY(Sno) REFERENCES S(Sno)
    ON DELETE CASCADE
    ON UPDATE CASCADE,
    FOREIGN KEY(Cno) REFERENCES C(Cno)
    ON DELETE CASCADE
    ON UPDATE CASCADE
);
  1. 触发器
    ☆ 建立一DML触发器,每当学生的成绩发生更新时,将更新的学号,成绩存入g-log表内
CREATE TABLE g-log
(
    Sno CHAR(10),
    Grade SMALLINT
);
go
CREATE TRIGGER RTI_UP
ON SC
FOR UPDATE
AS
IF UPDATE(GRADE)
BEGIN
INSERT INTO g-log
SELECT SNO,GRADE
FROM INSERTED
WHERE GRADE BETWEEN 0 AND 100
END
RETURN
go

☆ 建立一个INSTEAD OF触发器,每当删除课程表中记录时,先检查此课程是否已被选修,如选修则不允许删除,且给出提示信息“此课程已有学生已选修,无法删除”

go
CREATE TRIGGER C_CHECK1
ON C
INSTEAD OF DELETE
AS
IF EXISTS(SELECT CNO
FROM SC
WHERE CNO=SC.CNO)
BEGIN
PRINT '此课程已有学生已选修,无法删除'
ROLLBACK TRANSACTION
END
go

五、数据库的安全性

实验题目:数据库的安全性
实验目的和要求:

  1. 掌握SQL Server2005的安全控制机制
  2. 掌握SQLServer2005的身份验证模式
  3. 理解数据库用户帐户的基本概念
  4. 理解角色的概念
    实验步骤:
  5. 按实验内容要求完成各项操作
  6. 根据题目要求给出解决方案
  7. 提交实验报告
    实验内容:
  8. 定义登录log1,log2,log3
  9. 定义用户user1,user2,user3
  10. 掌握SQL SERVER 2005架构和用户分离的概念
  11. 数据库的授权、授权语句
    ☆ 将查询SC表和修改GRADE属性的权限授予用户user1。
GRANT SELECT,UPDATE(Grade)
ON SC
TO user1;

☆ 将对表S的插入权限授予用户user2,并允许他将此权限授予其他用户。

GRANT INSERT
ON S
TO user2
WITH GRANT OPTION;

☆ 允许用户user3拥有对cs系学生的查询权限

GRANT SELECT(Sdept='CS')
ON S
TO user3;

☆ 创建角色R1,授予R1 课程表查询和插入的权限,并授予用户user3

CREATE ROLE R1;
GRANT SELECT,INSERT
ON C
TO R1;
GRANT R1
TO user3;

☆ 删除角色R1课程表的插入权限

REVOKE INSERT
ON C
FROM R1;

☆ 收回所有用户对表S的插入权限。

REVOKE INSERT
ON TABLE S
FROM user1,user2,user3;
建立环境实验数据库/表 实验2 实验类型:验证 实验要求:必修 一、实验目的 通过本实验的学习,使学生熟悉SQL Server 2014的集成环境,帮助学生掌握数据库、表的建立方法以及SQL Server的数据导入方法 二、实验内容    ()、SQL Server 2014的安装 SQL Server2014的安装过程与 SQL Server 2008、SQL Server2012的安装过程类似,都提供了一个功能树以用来安装所有 SQL Server 组件,包括计划、安装、维护、工具、资源、高级、选项等功能。下面是各功能选项中所包含的内容,如图3-1所示。 图3-1 安装计划中的内容 (1)选择“安装”功能,因为要创建SQL Server 2014的全新安装,单击“全新SQL Server 2014独立安装或向现有安装添加功能”选项,如图3-2所示。 图3-2 “安装”功能中的内容 (2)在“产品密匙”页上,选择相应的单选按钮,这些按钮指示是安装免费版本的SQL Server还是具有产品密匙的产品版本,如果使指免费的评估版,只有180天的试用期限,如图3-3所示。 图3-3 “产品密钥”界面 (3)在“许可条款”页上阅读许可协议,然后选中相应的复选框以接受许可条款和条件。如图3-4所示。 图3-4 “许可条款”界面 (4)系统进行安装程序支持规则检查,以确定安装SQL Server安装程序支持文件可能发生的问题。必须更正所有的失败,安装程序才能继续。如图3-5所示。 图3-5 “安装规则”界面 (5)在“设置角色”页上选择SQL Server功能安装,如图3-6所示。 图3-6 “设置”角色界面 (6)在“功能选择”页上选择要安装的组件。选择功能名称后,右侧窗体中会显示每个组件的说明。可以根据实际需要,选中一些功能,如图3-7所示。一般应用可选择“数据库引擎服务”、“客户端工具连接”、“SQL客户端连接”和“管理工具”等选项。 图3-7“功能选择”界面 (7)在“实例配置”页上制定是安装默认实例还是命名实例,对于默认实例,实例的名称和ID都是MSSQLSERVER,也可以自己“命名实例”安装实例,如图3-8所示。SQL Server支持多个实例,即支持在同一台计算机上同运行多个SQL Server数据库引擎实例,每个SQL Server数据库引擎实例各有一套不为其它实例共享的系统及用户数据库。应用程序连接同一台计算机上的SQL Server数据库引擎实例的方式与连接其它计算机上运行的SQL Server数据库引擎的方式基本相同。 图3-8 “实例配置”界面 (8)在“服务器配置”页上指定SQL Server服务的登录帐户。SQL Server提供了多种服务,可以为所有SQL Server服务分配相同的登录账户,也可以分别配置每个服务账户。还可以指定服务是自动启动、手动启动还是禁用。Microsoft建议对各服务账户进行单独配置,以便为每项服务提供最低特权,即向SQL Server服务授予它们完成各自任务所需的最低权限,如图3-9所示。SQL Server中的每个服务代表一个进程或一组进程,每个进程需要有访问SQL Server相关文件和系统注册表的权限,为了能让SQL Server服务在操作系统中正常的启动和运行,就需要指定SQL Server的服务帐户,所以服务帐户指的是Windows操作系统中的帐户。 图3-9 “服务器配置”界面 (9)在“数据库引擎配置”的“服务器配置”页上指定身份验证模式、用户名、密,如图3-10所示。这里的用户身份验证指的是登录到服务器使用的身份验证模式及用户名和密。身份验证模式分为“Windows身份验证模式”和“混合模式(SQL Server身份验证和Windows身份验证)”。如果选择“Windows身份验证模式”表示则只能使用Windows的帐号登录,即使用当前登录到操作系统的帐号进行登录,通过这种方式用户登录到SQL Server中不再需要输入帐号和密。如选择“混合模式(SQL Server身份验证和Windows身份验证)”表示除了可以用使用登录到Windows的帐号作为登录的依据外,还可以使用SQL Server系统的帐号登录,这里必须为内置SQL Server系统管理员账户(SA)提供一个强密。必须至少为SQL Server实例指定一个系统管理员。若要添加用以运行SQL Server安装程序账户,则要单击“添加当前用户”按钮。若要向系统管理员列表中添加账户或从中删除账户,则单击“添加…”或“删除…”按钮,然后编辑将拥有SQL Server实例的管理员特权的用户、组或计算机列表。 图3-10 设置身份验证模式和管理员 (10)在“准备安装”页显示安装过程中的安装选项的树视图,如图3-11所示。若要继续,单击“安装”按钮。在安装过程中,“安装进度”页会提供相应的状态,因此可以在安装过程中监视安装进度。 图3-121“准备安装”界面 (11)安装完成后,“完成”页提供指向安装志文件摘要以及其他重要说明的链接。如图3-12所示。 图3-12 “安装完成”界面 ()、建库建表练习      1、利用语句建库和建表: 创建学生数据库StuDB,文件名和位置自定,在此数据库中创建如下三张表: 学生表(student) (   学号(sno) 普通编定长字符类型,长度9,,   姓名(sname) 普通编定长字符类型,长度10,非空,   性别(ssex) 统一编定长字符类型,长度2,   年龄(sage) 微整型,   所在系(sdept) 统一编可变长字符类型,长度20 ) 课程表(course) (   课程号(cno) ,通编定长字符类型,长度4,,   课程名(cname) 统一编定长字符类型,长度,40,非空,   开课学期(Semester) 短整数, 学分(credit) 短整数 ) 修课表(sc)(   学号(sno) 普通编定长字符类型,长度7,,外   课程号(cno) 普通编定长字符类型,长度6,,外   成绩(grade) 小整型,   修课类别(ctype)普通编定长字符类型,长度4 ) 2、建立“汽车”数据库,文件名和位置自定,在此数据库中创建如下三张表: 汽车表(CarT),结构如下:   汽车序号(CId) 整型 关键字,   汽车名称(CName) 普通编定长字符类型 长度为10  非空,   型号(CType)普通编变长字符类型 长度为60  非空,   价格(CPrice) 整型,   车身眼色(Ccolor)普通编变长字符类型 长度为20。 部门表(DepartT),结构如下:   部门序号(DId)整型 关键字,   部门名(DName)普通编定长字符类型 长度为20   非空,   负责人名(DLead)普通编定长字符类型 长度为10  非空,   人数(DAmount) 整型。 汽车出厂表(FacT),结构如下:   汽车序号(CID) 整型 非空,   部门序号(DId) 整型 非空,   出厂期(FDate)小间型 非空,   出厂数量(FAmount) 整型,   出厂价格(FPrice) 整型。   其中:关键字为(汽车序号,部门序号,出厂期)   “汽车序号”为引用汽车表的“汽车序号”的外部关键字; “部门序号”为引用部门表的“部门序号”的外部关键字。 3、使用数据库的可视化工具建库建表 建立银行贷款表,具体要求同课堂教学的建库建表一致。 银行表(BankT)( 银行代(Bno) 键 银行名称(Bname) 非空 电话(Tel) ) 法人表(LET)( 法人代(Eno)键 法人名称(Ename)取值唯一 经济性质(Enature) 注册资金(Ecapital) 法定代表人(Erep) ) 贷款表(LoanT)( 法人代(Eno) 银行代(Bno) 贷款期(Ldata) 贷款金额(Lamount) 贷款期限(Lterm) )        ()数据导入练习 将“学生数据库数据.xls”中的数据导入到学生数据库的三张表中。 将“银行贷款数据.xls”中的数据导入到银行贷款数据库的三张表中。 三、实验报告 将实验结果反映在实验报告中,并对实验中遇到的问题及解决方案、进行整理、分析总结,提出实验结论或自己的看法。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值