MySQL笔记七:DML——事务

7.1事务的含义
事务是一个完成的业务逻辑,比如从A账户向B账户转账1000元,则将A账户的钱减去1000,B账户的钱加上1000
以上的操作是一个最小的工作单元,不可再分,要么同时成功,要么同时失败,这样才能保障钱是对的
 
7.2只有DML才有事务这一项,和其他语句无关
insert
delete
update
正是因为做某件事的时候,需要多条DML语句联合起来才能实现,因此需要事务的存在,事务就是批量的DML语句同时成功或同时失败。
 
7.3如何实现事务
InnoDB存储引擎:提供一组用来记录事务活动的日志文件
在事务的执行过程中,每一天DML的操作都被记录在日志文件中,我们可以提交事务也可以回滚事务。
提交事务:清空事务性活动的日志文件,将数据完全彻底地表现在数据库中,提交意味着事务的结束,是全部成功的结束。
回滚事务:将之前所有的DML操作全部撤销,并且清空事务性活动的日志文件,回滚意味着事务的结束,是全部失败的结束。
 
7.4提交事务和回滚事务
提交事务commit
回滚事务rollback
mysql在默认情况下是支持自动提交(每一条语句自动执行一次commit)的,这种自动提交实际上是不符合我们的开发习惯的,那么怎么关闭自动提交机制呢?
 
先执行:start transaction;
再执行:一条或多条DML语句
最后执行:commit;或rollback;//回滚只能跳到上一次提交的位置
 
7.5事务的特性
  • 原子性:事务是最小的工作单元,不可再分
  • 一致性:在同一个事务中,必须所有操作同时成功或同时失败
  • 隔离性:事务A和事务B之间有一定的隔离性,一张表有多个事务,相当于多线程操作
  • 持久性:事务最终结束的一个保障,事务提交就相当于将没有保存到硬盘上的数据正式存储到硬盘上
 
事务的隔离性,隔离级别有四个:
    • 读未提交:read uncommitted(最低级别)
                事务A可以读到事务B中未提交的数据,我们称为脏读现象(dirty read),这种隔离级别一般不用
  • 读已提交:read committed
                            事务A只可以读到事务B中已提交的数据,解决了脏读现象,但是缺点是不可重复读取数据(事务 
                             开启之后,第一次读到的数据可能是3条,第二次读取的时候是4条,事务每次读取的结果不一 
                             样),这种隔离级别读到的都是真实的数据,因此orcle中默认的隔离级别是read committed
  • 可重复读:repeated read
                            事务A开启之后,只要事务不结束,不管是多久,每一次在事务A中读取到的数据都是一致的,
                            尽管事务B已经将数据修改了,这就是可重复读。优点是解决了不可重复读取数据的问题,
                            缺点是可能会出现幻影,每一次读取都是事务A刚开启时的数据情况
                            mysql中默认的事务隔离级别是repeated read
  • 序列化/串行化:serializable(最高级别)
                            这种隔离级别最高,效率最低,解决了所有问题。
                            这种隔离级别表示事务排队,多个事务不能并发,
7.6验证各种隔离级别
查看隔离级别:select @@tx_isolation;
设置隔离级别: set global transaction isolation level read uncommitted;    (设置好之后需要退出一下重新登录mysql)
 
验证:read uncommitted
开两个窗口,两个start transaction,观察在执行DML语句的过程中,使用查询语句观察读取到的信息的变化
 
验证:read committed
验证:repeated read
验证:serializable
 
 
 
posted @   盛夏小叮当  阅读(224)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【译】Visual Studio 中新的强大生产力特性
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 字符编码:从基础到乱码解决
点击右上角即可分享
微信分享提示