当前位置: 首页 > news >正文

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 操作,使数据恢复到事务开始前的状态,所以修改操作被撤销,成绩不变。

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

http://www.lryc.cn/news/583464.html

相关文章:

  • ARM汇编编程(AArch64架构)课程 - 第7章:SIMD与浮点运算
  • STIDGCN(时空交互动态图卷积网络)的原理,包括其核心模块的设计思路和工作机制 交通预测是智能交通系统中的一个重要任务
  • python+vue的企业产品订单管理系统
  • Redis:分组与设备在 Redis 中缓存存储设计
  • Redis-哨兵机制doctor环境搭建
  • CSS基础选择器、文本属性、引入方式及Chorme调试工具
  • Linux 测开:日志分析 + 定位 Bug
  • 【图像处理基石】如何检测到画面中的ppt并对其进行增强?
  • deepseek实战教程-第十篇deepseek对MCP协议支持
  • 计算机网络实验——网线的制作和测试
  • 7、整合前几篇插件列表
  • 云成本优化的核心原则与框架
  • Spring AI 本地 RAG 实战:用Redis、Chroma搭建离线知识问答系统
  • 【解决方法】ollama在powershell或者cmd运行时乱码报错
  • 网络安全之RCE分析与利用详情
  • 从零用java实现 小红书 springboot vue uniapp(13)模仿抖音视频切换
  • uniapp如何创建并使用组件?组件通过Props如何进行数据传递?
  • scp:上传大型数据集到实验室服务器
  • linux-用户和组
  • 家庭网络中的服务器怎么对外提供服务?
  • linux-进程信号的产生与发送
  • Redis分布式锁从入门到放弃:Redisson源码解密
  • 玛哈特网板矫平机:精密矫平金属开平板的利器
  • 掌握 Winget 安装:从 Microsoft Store 到 winget-install 脚本的完整方案
  • 虚幻引擎5 GAS开发俯视角RPG游戏 #5-8:倾听属性变化
  • 基于Matlab多特征融合的可视化指纹识别系统
  • 141-CEEMDAN-VMD-Transformer-BiLSTM-ABKDE多变量区间预测模型!
  • 让AI绘图更可控!ComfyUI-Cosmos-Predict2基础使用指南
  • Fluent许可配置常见问题
  • Android网络层架构:统一错误处理的问题分析到解决方案与设计实现