1、学 号 : 2 0 1 4 2 1 5 0 1 9 姓 名 : 马 有 贵 实 验 一设 计 数 据 库 、 数 据 表 并 编 程 实 现一 、 实 验 目 的通 过 “ 数 据 库 系 统 概 论 ” 书 本 知 识 学 习 和 “ 数 据 库 原 理 与 应 用 ” 课 程 教 学 所 授 知 识 对 “ 教 学管 理 系 统 ” 的 实 验 内 容 进 行 分 析 , 通 过 建 立 数 据 库 、 数 据 表 、 数 据 视 图 以 及 触 发 器 , 利 用SQL结 构 化 查 询 语 言 提 供 的 数 据 操 纵 功 能 , 设 计 实 现 对 数 据 的 定 义 、 修 改
2、、 删 除 、 查 询 、 更新 以 及 控 制 等 操 作 , 并 按 照 实 验 指 导 书 的 各 项 要 求 完 成 实 验 内 容 。二 、 实 验 内 容( 1) 根 据 实 验 建 议 所 示 , 建 立 “ 学 生 管 理 ” 数 据 库 。( 2) 建 立 数 据 表 的 方 法 , 建 立 五 个 相 关 的 数 据 表 。 完 成 数 据 库 的 建 立 并 定 义 各 表 的 完 整 性约 束 条 件 。 分 别 使 用 企 业 管 理 器 和 SQL 语 言 来 实 现 。( 3) 熟 练 掌 握 并 应 用 SQL中 的 数 据 表 定 义 、 删 除 和 修 改
3、等 操 作 命 令 ;( 4) 熟 练 掌 握 为 各 表 常 用 字 段 建 立 索 引 , 以 提 高 数 据 检 索 效 率 。create database 学 生 管 理 ;create table student ( sno Char(9 ),sname Char(1 0 ) not null,sbirthday Datetime,ssex Char(2 ) check(ssex in (男 ,女 ),sclass Char(2 0 ),sremark Char(1 0 0 ),address Char(4 0 ),zipcode Char(6 ),phoneChar(1 5 ),
4、email Char(4 0 ), primary key(sno) );create table course ( cno char(6 ) primary key,cname char(2 0 ),cpno char(6 ),ctime Numeric(2 ),credit Numeric(2 ),foreign key(cpno)references course(cno);create table score(sno char(9 ), cno char(6 ),primary key(sno,cno),foreign key(sno)references student(sno),f
5、oreign key(cno)references course(cno),score Numeric(3 );create table teacher( Tno char(2 0 ) primary key,Tname char(2 0 ) ,Tsex Char(2 ) check(Tsex in (男 ,女 ),Department char(1 5 ),tbirthday Datetime);create table Teaching(Tno char(2 0 ),cno char(6 ),tdate datetime,classroom char(1 0 ),sclass char(2
6、 0 ),primary key(Tno,cno),foreign key(Tno)references teacher(Tno),foreign key(cno)references course(cno);学 号 : 2 0 1 4 2 1 5 0 1 9 姓 名 : 马 有 贵 实 验 二设 计 数 据 插 入 、 修 改 、 删 除 、 查 询 和 视 图 等 操 作 并 编 程 实 现一 、 实 验 目 的( 1) 熟 练 掌 握 数 据 更 新 语 句 , 灵 活 地 操 作 插 入 数 据 、 修 改 数 据 和 删 除 数 据 ;( 2) 熟 练 掌 握 关 系 数 据 库 中
7、 的 完 整 性 概 念 的 应 用 ;( 3) 掌 握 单 表 查 询 的 基 本 方 法 ;( 4) 掌 握 多 表 连 接 查 询 的 基 本 方 法 ;( 5) 熟 练 掌 握 以 下 练 习 , 并 进 行 以 下 各 类 查 询 : 选 择 表 中 的 若 干 列 、 查 询 全 部 列 、 查 询 经 过 计 算 的 值 ; 选 择 表 中 的 若 干 元 组 , 即 消 除 取 值 重 复 的 行 与 查 询 满 足 指 定 条 件 的 元 组 ( 包 括 : 比较 大 小 、 确 定 范 围 、 确 定 集 合 、 字 符 匹 配 、 涉 及 空 值 和 多 种 条 件 查
8、询 ) ; 对 查 询 结 果 排 序 ; 使 用 集 函 数 ; 对 查 询 结 果 分 组( 6) 熟 练 掌 握 以 下 练 习 , 并 进 行 下 列 各 类 连 接 查 询 : 等 值 与 非 等 值 连 接 查 询 ; 自 身 连 接 ; 外 连 接 ; 复 合 条 件 连 接 ;( 7) 掌 握 嵌 套 查 询 的 基 本 方 法 ;( 8) 掌 握 集 合 查 询 的 基 本 方 法 ;( 9) 熟 练 掌 握 查 询 视 图 操 作( 10) 熟 练 掌 握 更 新 视 图 操 作( 11) 熟 练 关 系 的 完 整 性 概 念 , 领 会 视 图 的 用 途( 12) 练
9、 习 以 下 各 类 查 询 : 带 有 IN 谓 词 的 子 查 询 ; 带 有 比 较 运 算 符 的 子 查 询 ; 带 有 ANY 或 ALL谓 词 的 子 查 询 ; 带 有 EXISTS 谓 词 的 子 查 询 ; 视 图 查 询 与 更 新 操 作 ;二 、 实 验 内 容根 据 以 下 给 定 的 部 分 数 据 表 信 息 , 分 别 对 student, course, score, teacher, teching表 进 行 数 据 插 入 以 及 根 据 题 目 要 求 用 SQL语 句 实 现 。- student 表 插 入 数 据 ;insertinto stud
10、ent(sno,sname,sbirthday,sclass)values(0 1 1 1 1 0 1 0 1 ,章 海 潮 ,1 9 8 2 .0 2 .0 7 ,信 管 系 0 1 0 1 );insertinto student(sno,sname,sbirthday,sclass)values(0 1 1 1 1 1 2 0 4 ,董 承 悟 ,1 9 8 2 .0 6 .0 6 ,电 商 系 0 1 0 2 );- course 表 插 入 数 据insertinto course(cno,cname,credit,ctime)学 号 : 2 0 1 4 2 1 5 0 1 9 姓
11、名 : 马 有 贵 实 验 二values(C0 0 1 ,数 据 库 原 理 ,4 ,6 4 );insertinto course(cno,cname,credit,ctime)values(C0 0 2 ,高 等 数 学 ,4 ,7 2 );- score 表 插 入 数 据insertinto score(sno,cno,score)values(0 1 1 1 1 0 1 0 1 ,C0 0 1 ,9 0 );insertinto score(sno,cno,score)- teacher 表 插 入 数 据insertinto teacher(tno,tname,tsex,depa
12、rtment,tbirthday)values(T0 0 1 ,江 承 基 ,男 ,信 息 管 理 系 ,1 9 6 4 .0 3 .2 1 );insertinto teacher(tno,tname,tsex,department,tbirthday)values(T0 0 2 ,梁 其 政 ,男 ,信 息 管 理 系 ,1 9 7 3 .1 2 .1 2 );- teaching 表 插 入 数 据insertinto teaching(tno,cno,tdate,classroom,sclass)values(T0 0 1 ,C0 0 5 ,2 0 1 2 -0 1 -0 9 ,西 二
13、 4 0 5 ,信 管 系 0 1 0 1 );insertinto teaching(tno,cno,tdate,classroom,sclass)values(T0 0 1 ,C0 0 2 ,2 0 1 3 -0 4 -1 0 ,主 4 0 1 ,会 计 系 0 1 0 2 );- ( 2 ) select * from student;- ( 3 ) select sno,sname from student;- ( 4 ) select sno,sname,sclass from student group by(sclass);- ( 5 ) select sname,year(sb
14、irthday) from student ;- ( 6 ) select sname,year(Curdate()-year(sbirthday) as 年 龄 from student ;- ( 7 ) select sname from student where sclass=信 管 系 0 1 0 1 ;- ( 8 ) select sname,year(Curdate()-year(sbirthday) as 年 龄 from student whereyear(Curdate()-year(sbirthday) =1 5 and year(Curdate()-year(sbirt
15、hday)=2 8 ;- ( 1 3 ) select sname,sbirthday,sclass from student where sclass=信 管 系 0 1 0 1 or sclass=信 管 系 0 1 0 2 ;-( 1 4 ) select sname,sbirthday,sclass from student where sclass!=信 管 系 0 1 0 1 and sclass!=信 管 系 0 1 0 2 ;- ( 1 5 ) select * from student where sno=0 1 1 1 1 3 1 0 4 ;学 号 : 2 0 1 4 2
16、1 5 0 1 9 姓 名 : 马 有 贵 实 验 二- ( 1 6 ) select * from student where sno like 0 1 1 1 %;- ( 1 7 ) select sno,sname,ssex,year(Curdate()-year(sbirthday) from student wheresname like 张 %;- ( 1 8 ) select sno,sname,ssex,year(Curdate()-year(sbirthday) from student wheresname like _海 %;- ( 1 9 ) select sname
17、from student where sname not like 刘 %;- ( 2 0 ) select sname ,sclass from student where sname like %齐 %;- (2 1 ) select student.sno from student,course,score wherestudent.sno=score.sno and o=o;- ( 2 2 ) select cno,cname from course where cno like C%0 5 ;- ( 2 3 ) select cno,cname from course where c
18、name like %_% escape ;- ( 2 4 ) select sno,cno from scoure where score!=null;- ( 2 5 ) select sno,min(score),max(score),avg(score) from score where score=6 0 ;- ( 2 6 ) create table average(sno char(9 ),cno char(6 ),ave int,primary key(sno,cno),foreign key(sno) references student(sno),foreign key(cn
19、o) references course(cno);insertinto average(sno,cno,ave)select score.sno,o,avg(score)from student,course,scorewhere student.sno=score.sno and o=o ;- ( 2 7 ) update student set sbirthday=1 9 8 2 .0 8 .2 0 where sname=马 丽 娟 ;- ( 2 8 ) update student set zipcode=2 3 0 0 0 9 ;- ( 2 9 ) update average s
20、et ave=0 ;- ( 3 0 ) delete from average where cno=C0 0 7 ;- ( 3 1 ) delete from average ;- ( 3 2 ) create table tstudent ( sno Char(9 ),snameChar(1 0 ) not null,sbirthday Datetime,ssex Char(2 ) check(ssex in (男 ,女 ),sclass Char(2 0 ),sremark Char(1 0 0 ),address Char(4 0 ),zipcode Char(6 ),phoneChar
21、(1 5 ),emailChar(4 0 ), primary key(sno) );insert into tsudent select * from student ;delete from tstudent where sno=0 0 1 0 1 1 %;- ( 3 3 ) select sno,sname from tstudent where sclass=电 商 系 0 1 0 1 andyear(Curdate()- year(sbirthday)6 0 and max(score)=2 ) ;- ( 4 3 ) select o,second.cpno from course
22、first,course second wherefirst.cpno=o;- ( 4 4 ) select * from student,score where student.sno=score.sno o=C0 0 1 and score9 0 ;- ( 4 5 ) select cname,score,student.sname from student,course,score o=o and student.sno=score.sno;- ( 4 6 ) select sname from student where (not exists(select * from course
23、where (not exists (select * from scorewhere student.sno=score.sno and o=o);- ( 4 7 ) select sno,sname from student where not exists( select * from coursewhere cno in( select cno from course where course.credit=4 and not exists(select * from score b where o=score.sno and b.sno=student.sno);-( 4 8 ) s
24、elect * from score where cno=C0 0 5 and score(select score from score wherecno=C0 0 3 ) order by sno desc;- ( 4 9 ) select student.sno,sname from student,score wherestudent.sno=score.sno and cno=C0 0 1 or cno=C0 0 7 ;-( 5 0 ) select student.sno,sname from student,score where student.sno=score.snoand
25、 cno=C0 0 1 and cno=C0 0 7 ;- ( 5 1 ) select sname from student where sclass=会 计 系 0 1 0 2 andyear(Curdate()-year(sbirthday)9 0 and student.sno=score.sno;- ( 5 9 )create view vbirthday_student as select year(Curdate()-year(sbirthday) as agefrom student;- ( 6 0 ) create view vfemale_student as select
26、 * from student where ssex=女 ;-( 6 1 ) create view vaverage_student as select sno,avg(score) from score group by;- ( 6 2 ) drop view info_student1 ;-( 6 3 ) select sname from info_student2 where year(Curdate()-year(sbirthday) 2 7 ;- ( 6 4 ) select sno,sname from info_C0 0 1 _student1 ;- ( 6 5 ) upda
27、te info_student2 set sname=潘 长 江 where sno=0 1 1 1 1 1 1 0 3 ;- ( 6 6 ) insert into info_student1 (sno,sname,ssex,sbirthday) values(0 1 1 1 1 1 1 3 6 ,张 艺 谋 ,男 ,1 9 8 7 .1 1 .9 );- ( 6 7 ) delete from info_student1 where sno=0 1 1 1 1 1 1 3 5 and sname=黄 健 中 ;学 号 : 2 0 1 4 2 1 5 0 1 9 姓 名 : 马 有 贵 实
28、验 三数 据 库 存 储 过 程 、 触 发 器 的 建 立 及 编 程 操 作 的 实 现一 、 实 验 目 的( 1) 理 解 掌 握 数 据 库 中 存 储 过 程 、 触 发 器 的 原 理 、 使 用 场 合 及 方 法 ;( 2) 掌 握 触 发 器 在 关 系 数 据 库 的 完 整 性 实 现 中 的 作 用 ;( 3) 掌 握 数 据 库 中 存 储 过 程 的 建 立 方 法 和 调 用 过 程 ;( 4) 掌 握 数 据 库 中 触 发 器 的 建 立 方 法 ;( 5) 理 解 事 务 的 作 用 及 定 义 ;( 6) 熟 练 游 标 的 作 用 、 定 义 及 作
29、用 :二 、 实 验 内 容( 1 ) 创 建 两 个 临 时 表 Table1 , Table2 。create table table1(F1 char(40),F2 int);create table table2(F1 char(40),F2 int);( 2 ) 创 建 触 发 器 :( 3 ) 创 建 存 储 过 程 Exam_Proc( 4 ) 执 行 所 创 建 的 存 储 过 程 :结 果 : 2 1 5 0 1 9 1 8 8 马 有 贵 2 2 6 3 7 7 PC-2 0 1 0 0 3 2 9 1 4 2 3 SQLESQLEXPRESS5 2 1 6( 5) 利 用
30、 触 发 器 实 现 对 仓 库 货 物 的 管 理 。create database 仓 库 管 理 ;create table 货 物 信 息 表 (货 物 号 char(4) primary key,货 物 名 char(20) ,规 格 char(20) ,型 号 char(20) ,说 明 char(20);create table 库 存 表 (货 物 号 char(4) primary key,更 新 日 期 datetime ,库 存 量 decimal(9,2);create table 出 库 表 (出 库 时 间 datetime ,货 物 号 char(4) ,出 库
31、数 量 decimal(9,2) ,经 办 人 char(10),primary key(出 库 时 间 , 货 物 号 ),foreign key (货 物 号 ) references 货 物 信 息 表 (货 物 号 );create table 入 库 表 (入 库 时 间 datetime ,货 物 号 char(4),入 库 数 量 decimal(9,2),经 办 人 char(10),primary key(入 库 时 间 , 货 物 号 ),foreign key (货 物 号 ) references 货 物 信 息 表 (货 物 号 );学 号 : 2 0 1 4 2 1
32、 5 0 1 9 姓 名 : 马 有 贵 实 验 三入 库 表 的 Insert 触 发 器 。DELIMITER $ $CREATE/*DEFINER = user | CURRENT_USER */TRIGGER 仓 库 管 理 .TT1 AFTER INSERTON 仓 库 管 理 .入 库 表 FOR EACH ROW BEGINSET hwh=new.货 物 号 ;SET ruSJ=new.入 库 时 间 ;SET rksl=new.入 库 数 量 ;IF EXISTS(SELECT * FROM 库 存 表 WHERE 货 物 号 =hwh) THENUPDATE 库 存 表 SE
33、T 库 存 量 =库 存 量 +rksl,更 新 日 期 =rusj WHERE 货 物 号 =hwh ;ELSEINSERT INTO 库 存 表 VALUES(hwh,rusj,rksl) ;END IF;END$ $DELIMITER ;入 库 表 的 Delete 触 发 器 。DELIMITER $ $CREATE/*DEFINER = user | CURRENT_USER */TRIGGER 仓 库 管 理 .TT3 AFTER DELETEON 仓 库 管 理 .入 库 表 FOR EACH ROW BEGINSET hwh=old.货 物 号 ;SET ruSJ=NOW();
34、SET rksl=old.入 库 数 量 ;UPDATE 库 存 表 SET 库 存 量 =库 存 量 -rksl,更 新 日 期 =rusj WHERE 货 物 号 =hwh ;END$ $DELIMITER ;出 库 表 的 Insert 触 发 器 。DELIMITER $ $CREATE/*DEFINER = user | CURRENT_USER */TRIGGER 仓 库 管 理 .TT1 AFTER INSERTON 仓 库 管 理 .出 库 表 FOR EACH ROW BEGINSET hwh=new.货 物 号 ;SET ruSJ=new.出 库 时 间 ;SET rksl
35、=new.出 库 数 量 ;IF EXISTS(SELECT * FROM 库 存 表 WHERE 货 物 号 =hwh) THENUPDATE 库 存 表 SET 库 存 量 =库 存 量 -rksl,更 新 日 期 =rusj WHERE 货 物 号 =hwh ;ELSE学 号 : 2 0 1 4 2 1 5 0 1 9 姓 名 : 马 有 贵 实 验 三INSERT INTO 库 存 表 VALUES(hwh,rusj,rksl) ;END IF;END$ $DELIMITER ;出 库 表 的 Delete 触 发 器 。DELIMITER $ $CREATE/*DEFINER = u
36、ser | CURRENT_USER */TRIGGER 仓 库 管 理 .TT3 AFTER DELETEON 仓 库 管 理 .出 库 表 FOR EACH ROW BEGINSET hwh=old.货 物 号 ;SET ruSJ=NOW();SET rksl=old.出 库 数 量 ;UPDATE 库 存 表 SET 库 存 量 =库 存 量 +rksl,更 新 日 期 =rusj WHERE 货 物 号 =hwh ;END$ $DELIMITER ;三 、 心 得 体 会通 过 本 次 实 验 和 以 往 课 程 的 学 习 , 我 对 数 据 库 有 了 一 定 的 了 解 , 尤
37、其 在 本 次 实 验 中通 过 自 己 对 数 据 库 进 行 操 作 , 实 现 数 据 库 的 创 建 , 数 据 表 的 创 建 , 体 会 到 了 数 据 库 给 我们 生 活 与 工 作 带 来 的 方 便 性 , 同 时 通 过 本 次 实 验 我 也 从 更 深 层 次 上 理 解 了 数 据 库 的 原 理 ,例 如 在 本 次 试 验 中 , 我 们 主 要 是 创 建 学 生 管 理 数 据 库 , 然 后 在 学 生 管 理 数 据 库 中 创 建 学生 表 、 课 程 表 、 成 绩 表 、 教 师 表 、 教 师 课 程 表 , 通 过 对 表 的 创 建 , 我
38、理 解 了 主 码 与 外 码的 区 别 , 也 理 解 了 表 之 间 的 约 束 性 条 件 。在 本 次 实 验 中 我 们 也 对 各 个 创 建 的 表 进 行 了 相 应 的 操 作 , 通 过 用 SQL 语 句 实 现 对 表的 增 、 删 、 改 、 查 , 在 实 验 中 我 用 SQL 语 句 实 现 了 一 些 平 常 在 课 堂 上 理 论 性 的 知 识 , 通过 检 验 与 实 践 , 我 对 表 的 增 、 删 、 改 、 查 有 了 进 一 步 的 理 解 , 例 如 , 用 drop 语 句 与 delete语 句 的 不 同 之 处 是 , drop 语
39、句 是 将 整 个 表 删 除 , 而 delete 语 句 是 将 表 中 的 元 组 删 除 但 是表 还 是 存 在 的 。 还 有 在 实 验 中 我 们 一 定 要 仔 细 , 把 单 词 写 对 , 如 果 单 词 写 错 DBMS 就 会报 错 , 所 以 在 实 验 中 细 心 是 非 常 重 要 的 。实 验 中 不 是 一 帆 风 顺 的 , 也 遇 到 了 很 多 问 题 , 我 记 得 最 深 刻 的 是 我 在 做 表 的 触 发 器时 , 把 触 发 器 创 建 好 了 之 后 , 然 后 是 创 建 存 储 过 程 , 创 建 完 我 就 执 行 程 序 但 是
40、每 次 都 得不 到 结 果 , 我 就 很 纳 闷 , 然 后 查 看 了 好 几 次 程 序 代 码 , 但 都 是 正 确 的 没 有 错 误 , 经 过 好几 次 的 验 证 , 我 发 现 就 是 一 个 触 发 器 没 有 工 作 所 导 致 结 果 不 正 确 , 通 过 这 次 小 小 的 失 误我 感 觉 到 在 实 验 中 细 心 是 多 么 的 重 要 , 我 想 这 次 实 验 将 会 是 难 忘 的 。 问 题 出 了 , 就 是 帮助 我 找 到 了 自 己 的 不 足 , 我 感 到 在 这 次 实 验 中 很 有 收 获 , 也 努 力 在 以 后 的 工 作 与 生 活 中就 像 在 实 验 中 犯 过 的 错 误 不 要 在 重 复 了 。