《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

相关文章

python panda库从基础到高级操作分析

《pythonpanda库从基础到高级操作分析》本文介绍了Pandas库的核心功能,包括处理结构化数据的Series和DataFrame数据结构,数据读取、清洗、分组聚合、合并、时间序列分析及大数据... 目录1. Pandas 概述2. 基本操作:数据读取与查看3. 索引操作:精准定位数据4. Group

Python使用Tenacity一行代码实现自动重试详解

《Python使用Tenacity一行代码实现自动重试详解》tenacity是一个专为Python设计的通用重试库,它的核心理念就是用简单、清晰的方式,为任何可能失败的操作添加重试能力,下面我们就来看... 目录一切始于一个简单的 API 调用Tenacity 入门:一行代码实现优雅重试精细控制:让重试按我

MySQL中EXISTS与IN用法使用与对比分析

《MySQL中EXISTS与IN用法使用与对比分析》在MySQL中,EXISTS和IN都用于子查询中根据另一个查询的结果来过滤主查询的记录,本文将基于工作原理、效率和应用场景进行全面对比... 目录一、基本用法详解1. IN 运算符2. EXISTS 运算符二、EXISTS 与 IN 的选择策略三、性能对比

MySQL常用字符串函数示例和场景介绍

《MySQL常用字符串函数示例和场景介绍》MySQL提供了丰富的字符串函数帮助我们高效地对字符串进行处理、转换和分析,本文我将全面且深入地介绍MySQL常用的字符串函数,并结合具体示例和场景,帮你熟练... 目录一、字符串函数概述1.1 字符串函数的作用1.2 字符串函数分类二、字符串长度与统计函数2.1

使用Python构建智能BAT文件生成器的完美解决方案

《使用Python构建智能BAT文件生成器的完美解决方案》这篇文章主要为大家详细介绍了如何使用wxPython构建一个智能的BAT文件生成器,它不仅能够为Python脚本生成启动脚本,还提供了完整的文... 目录引言运行效果图项目背景与需求分析核心需求技术选型核心功能实现1. 数据库设计2. 界面布局设计3

SQL Server跟踪自动统计信息更新实战指南

《SQLServer跟踪自动统计信息更新实战指南》本文详解SQLServer自动统计信息更新的跟踪方法,推荐使用扩展事件实时捕获更新操作及详细信息,同时结合系统视图快速检查统计信息状态,重点强调修... 目录SQL Server 如何跟踪自动统计信息更新:深入解析与实战指南 核心跟踪方法1️⃣ 利用系统目录

使用IDEA部署Docker应用指南分享

《使用IDEA部署Docker应用指南分享》本文介绍了使用IDEA部署Docker应用的四步流程:创建Dockerfile、配置IDEADocker连接、设置运行调试环境、构建运行镜像,并强调需准备本... 目录一、创建 dockerfile 配置文件二、配置 IDEA 的 Docker 连接三、配置 Do

MySQL 内存使用率常用分析语句

《MySQL内存使用率常用分析语句》用户整理了MySQL内存占用过高的分析方法,涵盖操作系统层确认及数据库层bufferpool、内存模块差值、线程状态、performance_schema性能数据... 目录一、 OS层二、 DB层1. 全局情况2. 内存占js用详情最近连续遇到mysql内存占用过高导致

Android Paging 分页加载库使用实践

《AndroidPaging分页加载库使用实践》AndroidPaging库是Jetpack组件的一部分,它提供了一套完整的解决方案来处理大型数据集的分页加载,本文将深入探讨Paging库... 目录前言一、Paging 库概述二、Paging 3 核心组件1. PagingSource2. Pager3.

Python进行JSON和Excel文件转换处理指南

《Python进行JSON和Excel文件转换处理指南》在数据交换与系统集成中,JSON与Excel是两种极为常见的数据格式,本文将介绍如何使用Python实现将JSON转换为格式化的Excel文件,... 目录将 jsON 导入为格式化 Excel将 Excel 导出为结构化 JSON处理嵌套 JSON: