《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优化也是一门学问。总体上,技术需要认真学习,但也别把它想的太难。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值