《SQL必知必会——第20、21、22课:管理事物处理、使用游标、高级sql特性》

本文主要是介绍《SQL必知必会——第20、21、22课:管理事物处理、使用游标、高级sql特性》,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

       第20课 管理事物处理

       使用事务处理,通过确保成批的sql操作要么完全执行,要么完全不执行,来维护数据库的完整性。假如像微博加关注这样的场景,a关注b, a增加一个关注者,b增加一个粉丝,这个过程至少需要执行两条sql语句,如果两条只有一条执行成功,显然产生了脏数据,要么a的数据不对、要么b的数据不对。要保证整个操作完整,就要用到事物,上面场景,如果某一条出错,使用事物处理的话,整个过程将会回退,也就是撤销这两条sql执行的过程。说白了这就是一个要么整体成功、要么整体失败的过程,不会出现部分成功、部分失败,像煮饭一样夹生的情况。那么哪些sql语句可以使用事物处理呢?主要是insert、update、delete操作,select查询操作没必要使用事物。当然,使用事物的前提是要管理一批sql操作,至少两条条起,一条sql不管是什么语句,都没必要使用事物,因为既然是单条语句,失败就是失败了,没什么可回退的。

       通过上面这些文字可以建立对事物的一个大概了解,实际工作中,大多不会直接操作数据库写事物,而是通过框架如Spring、利用java等面向对象语言来做事物处理,相关知识点一堆,什么事物特性、事物隔离、事物传播,又可以写一篇文章了,当初我看的时候也是云里雾里,其实总体上万变不离其宗,只要掌握了最基础的概念,应用上没那么难的。

       第21课 使用游标

       这一课感觉没啥写的,因为游标很少用到,貌似以前开发一个android小项目时,使用sqlite操作数据时用过游标,游标是遍历结果集用的。游标之所以用的少,主要是工作中不提倡sql语句包含业务逻辑,也就是业务相关的东西,最好上层逻辑处理,sql只负责增删改查就可以了,那么查询出来的结果集自然不会通过游标来处理,都是交给上层逻辑处理的,所以平时工作中游标也就没啥用武之地了,当然我本人用的不多,自然没啥心得。

       第22课 高级sql特性

       这一课涉及的高级特性主要有主键、外键、索引、触发器等。主键很好理解,每一张表都需要一个主键,好像一本书都需要页码一样,主键不能重复、不能修改和更新,大多数应用场景,都会设计成自增的长整型,当然也可以设计成字符串类型,只要满足主键的条件即可。对于外键和触发器,第17课创建和操纵表简单说过,不使用外键和触发器。之所以这样,一来使用外键会增加开发复杂度,二来最主要是基于性能的考虑,由于外键约束将导致性能降低。比如一个业务流水表,频繁插入数据,如果这个表有3个外键,那么每次插入一条数据,就必须对这3个外键对应的3个表做相应的查找判断有无对应数据,如果这3个表很大,那么这3个表的判断时间就会很长,虽然外键指向的关联表的字段肯定是索引,但是我觉得很多时候,这样的判断本来就在程序里控制好了,通过外键再判断一次,显然降低性能。那么不使用触发器是什么原因呢?主要是触发器增加程序的复杂度,有些业务逻辑在代码中处理,有些业务逻辑用触发器处理,会使后期维护变得困难。毕竟一个模块、一个功能实现,要考虑的远一点,不能只顾眼前运行正常就好,还要考虑后续维护和升级,至于触发器其他弊端,大家可自行查阅。

       下面还是讲讲索引吧。索引用来排序数据以加快搜索和排序操作的速度,也就是说通过建立索引,可以改善查询操作的性能,但数据插入、修改和删除的性能将会降低。总体上索引利大于弊,尤其是数据量很大,当经常以某种特定的顺序排序数据时,则可以使用该数据建立索引,以加快数据检索。至于索引的原理,可以理解为索引是树的结构。每个表都有一个主键,数据库会以主键值构造一棵树,叶子节点存放着该主键值对应的整行数据。一张表在数据结构上等价于一颗以主键排序好的树。其他自己建的索引叫辅助索引,辅助索引的树,叶子节点存放两样东西:索引值及对应的主键。一般是先查找辅助索引树,找到索引对应的主键,然后再到主键树中找到对应的整行数据。如果没有索引,那只能从主键树中,全表扫描所有叶子节点,找到符合条件的数据。不过也没必要所有的表都建索引,一般单表不超过一万条数据,可以不建索引,因为数据量少,索引的查询优势体现不出来,反而建了索引会占用存储空间。

       ok,《SQL必知必会》这本书就讲完了,每一课讲的都比较基础,看了这些只能保证自己会用,但能否用的好、用的精,还需要实战多积累,sql优化也是一门学问。总体上,技术需要认真学习,但也别把它想的太难。

这篇关于《SQL必知必会——第20、21、22课:管理事物处理、使用游标、高级sql特性》的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1114962

相关文章

Mybatis对MySQL if 函数的不支持问题解读

《Mybatis对MySQLif函数的不支持问题解读》接手项目后,为了实现多租户功能,引入了Mybatis-plus,发现之前运行正常的SQL语句报错,原因是Mybatis不支持MySQL的if函... 目录MyBATis对mysql if 函数的不支持问题描述经过查询网上搜索资料找到原因解决方案总结Myb

MySQL 筛选条件放 ON后 vs 放 WHERE 后的区别解析

《MySQL筛选条件放ON后vs放WHERE后的区别解析》文章解释了在MySQL中,将筛选条件放在ON和WHERE中的区别,文章通过几个场景说明了ON和WHERE的区别,并总结了ON用于关... 今天我们来讲讲数据库筛选条件放 ON 后和放 WHERE 后的区别。ON 决定如何 "连接" 表,WHERE

mysql_mcp_server部署及应用实践案例

《mysql_mcp_server部署及应用实践案例》文章介绍了在CentOS7.5环境下部署MySQL_mcp_server的步骤,包括服务安装、配置和启动,还提供了一个基于Dify工作流的应用案例... 目录mysql_mcp_server部署及应用案例1. 服务安装1.1. 下载源码1.2. 创建独立

Mysql中RelayLog中继日志的使用

《Mysql中RelayLog中继日志的使用》MySQLRelayLog中继日志是主从复制架构中的核心组件,负责将从主库获取的Binlog事件暂存并应用到从库,本文就来详细的介绍一下RelayLog中... 目录一、什么是 Relay Log(中继日志)二、Relay Log 的工作流程三、Relay Lo

使用Redis实现会话管理的示例代码

《使用Redis实现会话管理的示例代码》文章介绍了如何使用Redis实现会话管理,包括会话的创建、读取、更新和删除操作,通过设置会话超时时间并重置,可以确保会话在用户持续活动期间不会过期,此外,展示了... 目录1. 会话管理的基本概念2. 使用Redis实现会话管理2.1 引入依赖2.2 会话管理基本操作

MySQL日志UndoLog的作用

《MySQL日志UndoLog的作用》UndoLog是InnoDB用于事务回滚和MVCC的重要机制,本文主要介绍了MySQL日志UndoLog的作用,文中介绍的非常详细,对大家的学习或者工作具有一定的... 目录一、Undo Log 的作用二、Undo Log 的分类三、Undo Log 的存储四、Undo

Springboot请求和响应相关注解及使用场景分析

《Springboot请求和响应相关注解及使用场景分析》本文介绍了SpringBoot中用于处理HTTP请求和构建HTTP响应的常用注解,包括@RequestMapping、@RequestParam... 目录1. 请求处理注解@RequestMapping@GetMapping, @PostMappin

MySQL游标和触发器的操作流程

《MySQL游标和触发器的操作流程》本文介绍了MySQL中的游标和触发器的使用方法,游标可以对查询结果集进行逐行处理,而触发器则可以在数据表发生更改时自动执行预定义的操作,感兴趣的朋友跟随小编一起看看... 目录游标游标的操作流程1. 定义游标2.打开游标3.利用游标检索数据4.关闭游标例题触发器触发器的基

springboot3.x使用@NacosValue无法获取配置信息的解决过程

《springboot3.x使用@NacosValue无法获取配置信息的解决过程》在SpringBoot3.x中升级Nacos依赖后,使用@NacosValue无法动态获取配置,通过引入SpringC... 目录一、python问题描述二、解决方案总结一、问题描述springboot从2android.x

SpringBoot整合AOP及使用案例实战

《SpringBoot整合AOP及使用案例实战》本文详细介绍了SpringAOP中的切入点表达式,重点讲解了execution表达式的语法和用法,通过案例实战,展示了AOP的基本使用、结合自定义注解以... 目录一、 引入依赖二、切入点表达式详解三、案例实战1. AOP基本使用2. AOP结合自定义注解3.