实 验 ( 一 ): 熟 练 掌 握 SQL 语 言 实 验 目 的 : 熟 悉 上 机 环 境, 创 建 数 据 库, 在 数 据 库 上 建 立 关 系 模 式, 插 入 数 据, 进 行 相 应 的 查 询 操 作 实 验 内 容 : 具 体 包 括 如 下 三 部 分 一 熟 悉 上 机 环 境 客 户 / 服 务 器 结 构, 数 据 库 服 务 器 在 一 台 NT 服 务 器 上, 同 学 们 通 过 客 户 机 ( 操 作 系 统 为 Windows 2000) 上 安 装 的 SQL Server 客 户 端 程 序, 使 用 SQL Server 数 据 库 服 务 器 具 体 包 括 : 1. 了 解 SQL Server 环 境 鼠 标 点 击 开 始, 进 入 Microsoft SQL Server 企 业 管 理 器, 点 击 SQL Server 组 下 的 数 据 库 服 务 器 ( 服 务 器 名 称 为 NEUC-201S(Windows NT)), 可 以 看 到 服 务 器 上 的 圆 形 标 志 变 为 绿 色, 说 明 客 户 端 程 序 已 与 服 务 器 连 接 成 功 点 击 服 务 器 (NEUC-201S(Windows NT)) 下 的 数 据 库, 可 以 看 到 服 务 器 上 已 建 立 的 数 据 库, 你 可 访 问 你 有 权 访 问 的 数 据 库, 并 进 行 相 应 的 操 作 功 能 因 为, 数 据 库 服 务 器 上 建 有 许 多 数 据 库, 每 个 数 据 库 都 有 一 些 合 法 的 用 户 2. 鼠 标 点 击 开 始, 进 入 Microsoft SQL Server 查 询 分 析 器, 输 入 用 户 名 和 口 令, 进 入 SQL 查 询 分 析 器 如 : 你 登 录 的 客 户 机 为 27 号, 那 么 请 以 用 户 名 user27, 口 令 为 user27 登 录, 登 录 后 缺 省 连 到 数 据 库 user27 上, user27/user27 是 数 据 库 user27 的 创 建 者, 因 此 用 户 user27/ user27 具 有 在 数 据 库 user27 上 创 建 表 等 一 切 权 力 3. 在 SQL 查 询 分 析 器 环 境 下, 你 就 可 进 行 SQL 命 令 语 句 操 作 了 二 在 数 据 库 useri 上 创 建 学 生 选 课 有 关 关 系 模 式, 并 插 入 相 应 的 数 据, 实 现 有 关 查 询 1. 描 述 学 生 课 程 情 况 的 E-R 图 如 下, 请 将 其 转 化 为 用 关 系 数 据 模 型 描 述 的 关 系 模 式 2. 在 数 据 库 中 定 义 这 些 关 系 模 式 学 号 姓 名 年 龄 3. 插 入 相 应 的 数 据, 试 着 插 入 重 复 的 元 组, 结 果 如 何? 学 生 所 在 系 4. 在 已 建 立 的 关 系 模 式 之 上 ( 已 插 入 一 成 绩 些 数 据 ) 建 立 主 键 约 束, 参 照 约 束 和 用 户 定 义 的 约 束 ( 要 求 学 生 年 龄 不 小 选 修 课 程 先 行 课 号 学 分 于 14 岁, 不 大 于 35 岁 ), 如 果 约 束 课 号 不 能 建 立, 请 分 析 原 因, 修 改 后 建 立 课 程 名 学 时 上 述 约 束 5. 如 果 约 束 建 立 后, 请 试 着 插 入 重 复 元 组, 结 果 如 何?
实 验 ( 二 ): 熟 练 掌 握 SQL 语 言 用 SQL 完 成 下 列 查 询 1. 求 选 修 了 课 程 的 学 生 的 学 号, 要 求 : (1) 不 用 distinct 消 除 重 复 元 组, 写 出 其 SQL 语 句 (2) 用 distinct 消 除 重 复 元 组, 写 出 其 SQL 语 句 (3) 如 果 该 查 询 写 成 : select Students.Sno from Students, SC where Students.Sno=SC.Sno 请 问 该 查 询 结 果 和 上 面 哪 个 结 果 是 相 同 的? 2. 求 开 设 的 课 程 号 课 程 名 学 时 和 学 分, 要 求 对 查 询 结 果 的 列 重 新 命 名 3. 求 计 算 机 系 和 数 学 系 的 学 生 学 号 姓 名 和 年 龄 4. 求 不 是 数 学 系 计 算 机 系 的 学 生 的 情 况, 要 求 select 后 写 * 代 替 列 出 所 有 的 列 名 5. 求 全 体 学 生 的 信 息, 要 求 按 年 龄 升 序 排 列 6. 求 计 算 机 系 年 龄 在 18~20 岁 之 间 的 学 生 姓 名 和 年 龄 7. 求 姓 名 时 以 D 开 头 的 数 学 系 学 生 8. 求 选 修 了 C2 课 程 的 学 生 的 学 号 姓 名 成 绩 9. 求 学 号 为 95 开 头 的 学 生 的 学 号 和 所 选 修 的 课 程 的 学 分 10. 求 选 修 C1 课 程 且 成 绩 为 80 分 以 上 的 学 生 的 学 号 姓 名 和 成 绩 11. 求 计 算 机 系 每 个 学 生 的 姓 名, 选 修 的 课 程 名 和 成 绩 12. 求 每 个 学 生 的 学 号 及 平 均 成 绩 13. 求 男 学 生 每 一 年 龄 组 中 超 过 50 人 的 年 龄 组 及 人 数 14. 求 每 一 门 课 程 的 间 接 先 行 课 号 15. 求 选 修 了 全 部 课 程 的 学 生 的 学 号
实 验 ( 三 ): 数 据 库 的 安 全 性 和 完 整 性 实 验 目 的 : 了 解 和 使 用 安 全 子 系 统 ; 进 行 完 整 性 定 义 和 检 查 实 验 内 容 : 具 体 包 括 如 下 三 部 分 一 熟 练 掌 握 SQL( 续 ) 1. 修 改 表 Students, 在 其 中 加 入 一 个 字 段 性 别 sex char(1) 2. 创 建 索 引 : 在 Students 表 的 Sno 上 创 建 唯 一 聚 簇 索 引, 在 SC 表 的 (Sno, Cno) 上 创 建 唯 一 索 引. 查 询 Students 表 的 内 容, 记 录 的 顺 序 有 变 化 吗? 查 询 SC 表 的 内 容, 记 录 的 顺 序 有 变 化 吗? 3. 创 建 视 图 创 建 计 算 机 系 学 生 视 图 CS_Students, 其 中 包 括 学 号 年 龄 和 性 别 带 with check opition 子 句 不 带 with check opition 子 句 时 各 插 入 一 计 算 机 系 学 生 记 录, 通 过 视 图 查 询 插 入 的 记 录, 结 果 如 何? 通 过 表 Students 查 询 插 入 的 记 录, 查 看 所 在 系 字 段 上 的 值? 创 建 一 视 图, 表 示 学 生 的 平 均 成 绩, 其 中 包 括 Sno,avgGrade 通 过 该 视 图 插 入 一 学 生 姓 名 和 平 均 成 绩, 结 果 如 何? 通 过 该 视 图 查 找 平 均 成 绩 在 90 分 以 上 的 学 生 的 学 号 和 平 均 成 绩, 结 果 又 如 何? 二 了 解 和 使 用 安 全 子 系 统 1 将 sql server 的 一 合 法 帐 户 (user60) 加 入 到 你 的 数 据 库 当 中 来, 并 给 其 授 权, 使 之 : 具 有 创 建 表 的 权 限 具 有 对 Students 表 查 询 的 权 限 具 有 对 Studetns 表 的 年 龄 字 段 修 改 的 权 限 2 用 user60/user60 进 入 系 统, 完 成 权 限 验 证 : 创 建 表 dept(sd,mn,addr) 创 建 视 图 s_view(sno,sage) 在 Students 表 上, 实 现 select * from Students 在 course 表 上, 实 现 select * from course update Studetns set Sage=Sage+1 update Students set Sdept= CS 3 你 是 数 据 库 的 dbo, 你 来 查 看 dept 表, 结 果 如 何? 使 用 set user 命 令 使 自 己 成 为 user60 后, 查 看 dept 表, 结 果 如 何? 三 完 整 性 定 义 和 检 查 1 创 建 表 Studetns, 要 求 学 生 的 年 龄 在 16 和 25 岁 之 间, 并 且 所 在 系 的 缺 省 取 值 为 CS 在 Studetns 表 上 插 入 一 学 生 记 录 ( 9921, cccc, MA,23, f ) 在 Studetns 表 上 插 入 一 学 生 记 录 ( 9922, ddd, MA,27, m )
在 Studetns 表 上 插 入 一 学 生 记 录 ( 9923, eeeee,21, m ) 在 Studetns 表 上 插 入 一 学 生 记 录 ( 9922, ddd, MA,23, m ) 2 创 建 表 course, 要 求 课 号 作 为 主 键 在 course 表 上 插 入 一 课 程 记 录 ( c9,40, cname1,1) 在 course 表 上 插 入 一 课 程 记 录 ( c9,40, cname2,1) 在 course 表 上 插 入 一 课 程 记 录 (null,25, canme3,2) 结 果 如 何? 3 修 改 表 Studetns, 指 定 学 号 为 主 键, 然 后 插 入 一 记 录 ( 9908, shang, CI,20) 插 入 一 记 录 ( 9908, shang, CI,20) 插 入 一 记 录 (, liang, CS,18) 插 入 一 记 录 (, an, CS,19) 结 果 如 何? 4 创 建 sc 表, 要 求 表 sc 中 的 学 号 参 照 表 Studetns 中 的 学 号,sc 中 的 课 号 参 照 course 中 的 课 号 参 照 约 束 创 建 完 成 后, 向 这 三 个 表 插 入 数 据 先 在 sc 表 插 入 一 个 选 课 记 录, 看 看 有 什 么 情 况 发 生? 先 删 除 sc 中 的 某 个 记 录, 看 看 有 什 么 情 况 发 生? 将 Studetns 表 中 的 学 号 9906 改 为 9907, 看 看 有 什 么 情 况 发 生?
实 验 ( 四 ): 事 务 的 并 发 控 制 实 验 目 的 : 通 过 实 验 了 解 实 际 系 统 中, 三 级 封 锁 协 议 的 实 现 方 法 和 使 用 方 法, 体 会 加 锁 操 作 死 锁 检 测 与 解 除 实 验 内 容 : 具 体 分 如 下 五 部 分 说 明 : (1)Set transaction isolation level read unted read ted repeatable read serializable 分 别 对 应 隔 离 级 0,1,2,3 (2) 要 求 两 人 一 组 1 隔 离 级 1( 缺 省 ) 方 式 下 体 会 两 事 务 的 并 发 执 行 结 果 具 体 步 骤 如 下 ( 以 user1 和 user2 为 例 ): 表 students update table students set age=20+1 where sno= 95001 select * from students where sno= 95001 1) 观 察 发 生 的 现 象, user2 的 语 句 可 以 执 行 吗 ( 是 否 可 以 读 到 别 人 没 有 提 交 的 数 据 )? 2) 观 察 发 生 的 现 象, user2 的 语 句 执 行 了 吗? 3) 加 锁 和 解 锁 操 作 的 完 成 者 是 数 据 库 用 户 吗? 2 隔 离 级 1( 缺 省 ) 方 式 下 体 会 两 事 务 的 并 发 执 行 结 果 具 体 步 骤 如 下 ( 以 user1 和 user2 为 例 ): 表 students select age from students where sno= 95001
update table students set age=20+1 where sno= 95001 1) 观 察 发 生 的 现 象, user1 的 语 句 可 以 执 行 吗 ( 是 否 可 以 修 改 别 人 正 在 读 的 数 据 )? select age from students where sno= 95001 2) 观 察 发 生 的 现 象, user2 的 语 句 执 行 了 吗? 结 果 如 何 ( 是 否 可 重 复 读 )? 3 在 隔 离 级 0 方 式 下 体 会 两 事 务 的 并 发 执 行 结 果 具 体 步 骤 如 下 ( 以 user1 和 user2 为 例 ): 表 students update table students set age=20+1 where sno= 95001 set transaction isolation level Read Unted select * from students where sno= 95001 1) 观 察 发 生 的 现 象, user2 的 语 句 可 以 执 行 吗 ( 是 否 可 以 读 到 别 人 没 有 提 交 的 数 据 )? 4 在 隔 离 级 1( 缺 省 ) 方 式 下 体 会 两 事 务 的 并 发 执 行 死 锁 情 况 具 体 步 骤 如 下 ( 以 user1 和 user2 为 例 ): user1 首 先 将 user2 接 纳 为 自 己 数 据 库 的 用 户, 并 授 权 user2 可 以 修 改 学 生 表 students 和 学 生 选 课 表 sc update table students set age=age+1 update table sc set grade=grade+5 update table sc set grade=grade+5 1) 观 察 发 生 的 现 象, user1 的 语 句 可 以 执 行 吗? update table students set age=age+1
2) 观 察 发 生 的 现 象, user2 的 语 句 执 行 了 吗? 结 果 如 何? 在 成 功 执 行 的 窗 口 输 入 并 执 行 下 列 语 句 5 在 隔 离 级 1( 缺 省 ) 方 式 下 体 会 两 事 务 并 发 执 行 锁 的 粒 度 ( 锁 数 据 所 在 页 ) 具 体 步 骤 如 下 ( 以 user1 和 user2 为 例 ): 表 students( 该 实 验 要 求 表 中 元 组 数 要 足 够 多, 要 求 指 定 关 键 字 约 束 ) update table students set age=age+1 where sno='95001' select * from students where sno='95201' 1) 观 察 发 生 的 现 象, user2 的 语 句 可 以 执 行 吗?