SQL 视图与事务知识点详解及练习题

在数据库操作中,视图和事务是非常重要的概念,它们在数据管理和操作一致性方面发挥着关键作用。下面我们将详细介绍视图和事务的相关知识,并通过练习题来巩固理解。

一、知识点梳理

(一)视图

  1. 作用:常用于保存复杂的 SQL 语句,是一张虚拟表。
  1. 格式:create or replace view 视图名称 as select...... with check option
  1. 操作:可进行 select、insert、update、delete 操作,依赖于真实表。
    • 注意:视图基于单表时,可进行 dml 操作,不用于分组函数或多表查询;条件视图(with check option)进行 dml 操作时必须满足条件。

(二)事务

  1. 依赖:事务依赖于 InnoDB 存储引擎。
  1. 四大特征:原子性(A)、一致性(C)、隔离性(I)、持久性(D)。
  1. 操作:start transaction(开始事务);sql 语句(dml 操作);commit(提交事务);rollback(回滚事务)。
  1. 隔离性的 4 个隔离级别(从低到高):读未提交、读已提交、可重复读、序列化。
  1. 锁的分类
    • 共享锁(s 锁):特征是多个事务可读取相同的数据,但阻止修改,通过 select .... lock in share mode 添加。
    • 排他锁(x 锁):特征是一个事务拥有排他锁后独占资源,提交或回滚后释放资源,通过 select .... for update 添加。
    • 表锁:特征是锁定整张表。lock tables 表名 read(共享读锁,类似于 s 锁,unlock tables 释放锁资源);lock tables 表名 write(排他锁,独享资源,不建议使用)。
    • 注:可通过程序或框架配置及注解进行事务操作。dml 操作默认为自动提交 commit。

二、练习题及解析

(一)选择题

  1. 以下关于视图的说法,正确的是( )

A. 视图是一张真实存在的表

B. 视图不能用于保存复杂的 SQL 语句

C. 视图基于单表时,一定可以进行 DML 操作

D. 带有 with check option 的条件视图,进行 DML 操作时必须满足条件

答案:D

解析:视图是虚拟表,并非真实存在,A 选项错误;视图的作用之一就是常用于保存复杂的 SQL 语句,B 选项错误;视图基于单表时,若不涉及分组函数等情况可进行 DML 操作,但不是一定可以,C 选项错误;带有 with check option 的条件视图,进行 DML 操作时必须满足条件,D 选项正确。

  1. 事务的四大特征不包括( )

A. 原子性

B. 连续性

C. 隔离性

D. 持久性

答案:B

解析:事务的四大特征是原子性(A)、一致性(C)、隔离性(I)、持久性(D),不包括连续性,所以选 B。

  1. 下列哪种隔离级别是 MySQL InnoDB 存储引擎的默认隔离级别( )

A. 读未提交

B. 读已提交

C. 可重复读

D. 序列化

答案:C

解析:MySQL InnoDB 存储引擎的默认隔离级别是可重复读,所以选 C。

  1. 关于共享锁(S 锁)的特征,说法正确的是( )

A. 阻止多个事务读取相同的数据

B. 允许多个事务读取相同的数据,但阻止修改

C. 一个事务拥有后独占资源

D. 以上说法都不正确

答案:B

解析:共享锁的特征是多个事务可读取相同的数据,但阻止修改,A 选项错误,B 选项正确;C 选项是排他锁的特征,所以选 B。

(二)简答题

  1. 简述视图的作用和格式。

答案:视图的作用是常用于保存复杂的 SQL 语句,它是一张虚拟表。其格式为 "create or replace view 视图名称 as select...... with check option"。

解析:视图本质是虚拟表,主要用于存储复杂 SQL,方便后续调用,格式中 "create or replace" 用于创建或替换视图,"as" 后接对应的 select 语句,"with check option" 是可选的条件约束。

  1. 事务操作的基本语句有哪些?

答案:事务操作的基本语句有:start transaction(开始事务);sql 语句(DML 操作);commit(提交事务);rollback(回滚事务)。

解析:start transaction 用于开启一个事务,之后执行具体的 DML 操作,若操作无误,用 commit 提交事务,使修改生效;若出现错误,用 rollback 回滚事务,恢复到事务开始前的状态。

  1. 锁有哪些分类?各自的特征是什么?

答案:锁主要分为以下几类:

  • 共享锁(S 锁):特征是多个事务可读取相同的数据,但阻止修改,可通过 "select .... lock in share mode" 添加。
  • 排他锁(X 锁):特征是一个事务拥有排他锁后独占资源,提交或回滚后释放资源,可通过 "select .... for update" 添加。
  • 表锁:特征是锁定整张表。其中 "lock tables 表名 read" 是共享读锁,类似于 S 锁,可通过 "unlock tables" 释放锁资源;"lock tables 表名 write" 是排他锁,独享资源,不建议使用。

解析:不同类型的锁适用于不同场景,共享锁适合多事务读取数据的情况,排他锁适合需要独占资源修改数据的场景,表锁则会锁定整张表,可能影响并发性能。

(三)案例分析题

现有一个学生表(student),包含字段:id(学号)、name(姓名)、age(年龄)、score(成绩)。

  1. 请创建一个视图 v_student,要求包含年龄大于 18 岁的学生的 id、name 和 score 信息,且带有 with check option。

答案:create or replace view v_student as select id, name, score from student where age > 18 with check option;

解析:按照视图创建格式,指定视图名称 v_student,select 语句选取所需字段,添加年龄大于 18 岁的条件,最后加上 with check option 约束。

  1. 若通过视图 v_student 插入一条年龄为 17 岁的学生记录,会出现什么情况?为什么?

答案:插入会失败。因为视图 v_student 带有 with check option,进行插入操作时必须满足视图定义的条件(年龄大于 18 岁),而插入的记录年龄为 17 岁,不满足条件,所以插入失败。

解析:with check option 会强制要求通过视图进行的 DML 操作必须满足视图定义时的条件,确保视图数据的一致性。

  1. 有一个事务,首先开启事务,然后将学生表中 id 为 1 的学生的成绩修改为 90 分,之后回滚事务,请问该学生的成绩最终是多少?为什么?

答案:该学生的成绩最终还是原来的分数。因为事务进行了回滚操作,回滚会撤销事务中所有的 DML 操作,使数据恢复到事务开始前的状态,所以修改操作被撤销,成绩不变。

解析:事务的回滚机制保证了在事务执行过程中出现错误时,数据可以恢复到初始状态,体现了事务的一致性和原子性。

相关推荐
岁忧几秒前
(LeetCode 面试经典 150 题) 138. 随机链表的复制 (哈希表)
java·c++·leetcode·链表·面试·go
鹦鹉0071 分钟前
IO流中的字节流
java·开发语言·后端
ldj202017 分钟前
CentOS上部署Redis及其哨兵(Sentinel)模式
数据库·redis·缓存
你我约定有三18 分钟前
分布式微服务--Nacos作为配置中心(二)
java·分布式·spring cloud·微服务·架构·wpf·负载均衡
qq_1657060726 分钟前
java实现运行SQL脚本完成数据迁移
java·sql
apocelipes1 小时前
atomic不是免费午餐
java·性能优化·golang·并发
Aurora_NeAr1 小时前
大数据之路:阿里巴巴大数据实践——OneData数据中台体系
大数据
A了LONE1 小时前
cv弹窗,退款确认弹窗
java·服务器·前端
黄雪超1 小时前
Kafka——关于Kafka动态配置
大数据·分布式·kafka
蔡楚门1 小时前
福彩双色球第2025088期篮球号码分析
java