1 事务 是处理一系列复杂操作的数据处理逻辑单元,在单元中的每个操作 ,要么完整的执行,要么全部不执行,通过将一系列要么全部执行要么全部回滚的复杂的业务操作整合为一个逻辑处理单元,可以简化错误恢复,并且使应用程序更加稳固,一个逻辑单元如果成为事务,必须具备4个属性,1 原子性 2 一致性 3 隔离性 4 持久性
(语言这个东西非常的有意思,所以对于的一个东西的定义往往都是总结性的,而我们在理解的时候,就要挂起头脑风暴,映射到我们的生活当中)
对于事务,在我们生活中就像我们去菜市场买菜,1 我们要找到我们要买的菜,2 询问价格 3 挑选商品 4 称重 5 商讨价格 6 双方交易 ,7 交易结束 但是如果在这个过程中的任何一个环节出现意外 则整个过程就会回到最初的情况:我拎个筐子来买菜。
2 对于事务的4个属性
A 原子性 事务必须是原子工作单位 ,要么执行全部,要么全部不执行。
C 一致性 事务在完成时,必须保证所有的数据的状态一致,
D 隔离性 事务在处理的过程中,不能够受其他事务的影响。
I 持久性 对于系统的影响是持久性的,该修改即使出现致命的系统故障也将一直保持。
(我们又要刮起风暴啦!今天又买菜 原子性 就是要么买到手 要么没买到 一致性 本来我是买的土豆 结果黑心的老板卖给我的是石头 这如何使得,最重要的是我不吃石头 隔离性 本来我买的挑的好好的 结果城管来啦 老板一兜 拿着东西跑啦 完了 买不成啦 持久性 交易结束啦 东西我拿啦 老板钱收啦 历史记录啦 持久啦 )
3 脏读 不可重复读 和 幻读
以上三种情况 均是并发操作引起的 并发操作时肯定存在的(除非是自己写个程序自己玩)
脏读 : t1 t2 t3 t4
A1 X=2 X=X+3 出现意外导致rollback 则X=2
A2 X=5
我们来看 A1 在t2时间修改X+3 此时X=5 但是还没有提交 同时在t3时间 A2 查看此时的X=5 再到t4时间 出现意外A1事务回滚 则X=2那么A2看见的X=5就是脏数据
不可重复读 : t1 t2 t3 t4
A1 X=2 X=X+3并commit
A2 X=2 X=5
定睛来看 A1 A2 时间看见的X都是等于2 而 A1在t2时间修改X+3等于5 那么A2 在t3时间再看X=5 两次的结果不一样
幻读 :我们在操作数据库时经常会查询符合特定条件的数据 如 A1 select * from table where name ='幻读' 而与此同时 A2
delete 或者 insert table 增加或者减少了一条记录,当A1 在执行查询语句的时候就会 出现两次读取的结果不一样,出现幻读。
不可重复读针对的是update操作 而幻读针对的是delete和insert操作。
4 数据库的隔离级别
1 read uncommited(读取未提交的内容) 2 read commited (读取提交的内容) 3 repeatable read (可重复读) 4 serializable (串行化)
各种数据库采用的隔离级别不一样,在隔离界别之前,其实应该先说一说锁,对于锁 ,有三种 1 共享锁 S 2 排他锁 X 3 更新锁 U
共享锁是在查询的过程中不允许其被修改,排他锁 锁定的数据不能修改 也不能查询
隔离级别都是根据锁来的设定的。