MySQL详解(4)-事务

背景:

为什么要使用事务这个技术?现在很多软件都是多用户,多程序,多线程的,对同一个表可能同时又很多人在用,为保持数据的一致性,所以提出了事务的概念;

eg:A给B打钱,A的账户-100后,B的账户就要+100,这两个update语句必须作为一个整体来执行,不然A扣钱了,B没有加钱这种问题很难处理;

一.什么是事务?

事务就是一段sql语句的批处理,但是这个批处理是一个atom(原子),不可分割,要么都执行,要么回滚,都不执行;

二.事务特性(ACID)

1.原子性:确保工作单元内的所有操作都成功完成,    否则事务将被中止在故障点,和以前的操作将回滚到以前的状态;

2.一致性:确保数据库正确地改变状态后,成功提交事务;

3.隔离性:使事务操作彼此独立的和透明的;

4.持久性:确保提交的事务的结果或效果的的系统出现故障时任然存在;

背景:在分布式系统中,通常会有多个线程链接到数据库中同时对一个表 进行操作(这里的同时并不表示同一个时间点,而是同时竞争CPU的资源,至于如何调度,就要看线程和操作系统如何进行调度了),这种情况下如果会话的事务设置不当就会导致数据混乱;

三:事务的隔离级别

1.serializable :可避免脏读,不可重复读,虚读情况的发生    ;(单线程访问的数据库,会导致性能降低很多)

2.repeatable read:可避免脏读,不可重复读情况的发生;(可重复读,是MySQL默认的事务隔离级别)

3.read committed:可避免脏读情况的发生;(读取已提交的数据)

4.read uncommitted:最低级别,以上情况均无法保证;(读取到了未提交的数据)

脏读:读到未提交的数据;

不可重复读:不可重复读是指读取到了别人对表中的某一条记录进行了修改,导致前后读取的数据不一致;重复读指的是我们每次读取到的结果都要一致;

幻读:在一个事务内读取到了别的事务插入的数据;

mysql事物处理实例

MYSQL的事务处理主要有两种方法
1.用begin,rollback,commit来实现
    begin开始一个事务
    rollback事务回滚
    commit 事务确认
2.直接用set来改变mysql的自动提交模式
    mysql默认是自动提交的,也就是你提交一个query,就直接执行!可以通过
    set autocommit = 0 禁止自动提交
    set autocommit = 1 开启自动提交
    来实现事务的处理。
但要注意当用set autocommit = 0 的时候,你以后所有的sql都将作为事务处理,直到你用commit确认或 rollback结束,注意当你结束这个事务的同时也开启了新的事务!按第一种方法只将当前的做为一个事务!


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值