《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

相关文章

vue使用docxtemplater导出word

《vue使用docxtemplater导出word》docxtemplater是一种邮件合并工具,以编程方式使用并处理条件、循环,并且可以扩展以插入任何内容,下面我们来看看如何使用docxtempl... 目录docxtemplatervue使用docxtemplater导出word安装常用语法 封装导出方

Linux换行符的使用方法详解

《Linux换行符的使用方法详解》本文介绍了Linux中常用的换行符LF及其在文件中的表示,展示了如何使用sed命令替换换行符,并列举了与换行符处理相关的Linux命令,通过代码讲解的非常详细,需要的... 目录简介检测文件中的换行符使用 cat -A 查看换行符使用 od -c 检查字符换行符格式转换将

Python FastAPI+Celery+RabbitMQ实现分布式图片水印处理系统

《PythonFastAPI+Celery+RabbitMQ实现分布式图片水印处理系统》这篇文章主要为大家详细介绍了PythonFastAPI如何结合Celery以及RabbitMQ实现简单的分布式... 实现思路FastAPI 服务器Celery 任务队列RabbitMQ 作为消息代理定时任务处理完整

使用Jackson进行JSON生成与解析的新手指南

《使用Jackson进行JSON生成与解析的新手指南》这篇文章主要为大家详细介绍了如何使用Jackson进行JSON生成与解析处理,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录1. 核心依赖2. 基础用法2.1 对象转 jsON(序列化)2.2 JSON 转对象(反序列化)3.

使用Python实现快速搭建本地HTTP服务器

《使用Python实现快速搭建本地HTTP服务器》:本文主要介绍如何使用Python快速搭建本地HTTP服务器,轻松实现一键HTTP文件共享,同时结合二维码技术,让访问更简单,感兴趣的小伙伴可以了... 目录1. 概述2. 快速搭建 HTTP 文件共享服务2.1 核心思路2.2 代码实现2.3 代码解读3.

Elasticsearch 在 Java 中的使用教程

《Elasticsearch在Java中的使用教程》Elasticsearch是一个分布式搜索和分析引擎,基于ApacheLucene构建,能够实现实时数据的存储、搜索、和分析,它广泛应用于全文... 目录1. Elasticsearch 简介2. 环境准备2.1 安装 Elasticsearch2.2 J

使用C#代码在PDF文档中添加、删除和替换图片

《使用C#代码在PDF文档中添加、删除和替换图片》在当今数字化文档处理场景中,动态操作PDF文档中的图像已成为企业级应用开发的核心需求之一,本文将介绍如何在.NET平台使用C#代码在PDF文档中添加、... 目录引言用C#添加图片到PDF文档用C#删除PDF文档中的图片用C#替换PDF文档中的图片引言在当

Java中List的contains()方法的使用小结

《Java中List的contains()方法的使用小结》List的contains()方法用于检查列表中是否包含指定的元素,借助equals()方法进行判断,下面就来介绍Java中List的c... 目录详细展开1. 方法签名2. 工作原理3. 使用示例4. 注意事项总结结论:List 的 contain

C#使用SQLite进行大数据量高效处理的代码示例

《C#使用SQLite进行大数据量高效处理的代码示例》在软件开发中,高效处理大数据量是一个常见且具有挑战性的任务,SQLite因其零配置、嵌入式、跨平台的特性,成为许多开发者的首选数据库,本文将深入探... 目录前言准备工作数据实体核心技术批量插入:从乌龟到猎豹的蜕变分页查询:加载百万数据异步处理:拒绝界面

Android中Dialog的使用详解

《Android中Dialog的使用详解》Dialog(对话框)是Android中常用的UI组件,用于临时显示重要信息或获取用户输入,本文给大家介绍Android中Dialog的使用,感兴趣的朋友一起... 目录android中Dialog的使用详解1. 基本Dialog类型1.1 AlertDialog(