mysql事务是什么?什么是脏读?幻读?不可重复读?

目录

一、事务概念(Transaction)

二、事务ACID原则

1.原子性(atomic)

2.一致性(consist)

3.隔离性(isolated)

4.持久性(durable)

事务基本操作:

        1.开启事务       start  transaction;

        2.提交事务        commit;

        3.回滚                  rollback;

事务提交的两种方式:

事务的隔离级别:

        三.脏读概念

四.幻读

五.不可重复读

   

总结



一、事务概念(Transaction)

        在mysql中,事务是一种机制,是访问和更新数据库的程序执行单元。

        将一组 SQL语句放在同一批次去执行,如果一个SQL语句出错,那该批次的所有SQL语句都会被取消执行。

特点:一个是事务中如果一个数据库操作失败,则整个事务中的所有数据库都操作失败。

限制:Mysql数据库中仅InnoDB和BDB类型的数据库表支持事务。

二、事务ACID原则

ACID,是指在可靠数据库管理系统(DBMS)中,事务(transaction)应该具有的四个特性:

1.原子性(atomic)

        数据库中的事务执行是不可再分的,整个语句要么都执行,要么不执行。

        事务是一个完整的操作过程,各个元素不可再分,事务中的所有元素必须作为一个整体提交或者回滚,任何元素失败,则整个事务将失败。

例如:转账交易过程可以理解为一个完整的事务,张三给李四转账500,首先要查询张三账户余额是否有500元,第二步就是把张三账余额减去500,同时要将李四的账户余额加500,这个操作才算完成。中间任何一个步骤出现问题,则交易失败。这种情况就体现了事务的原子性。

2.一致性(consist)

        在事务开始之前和事务结束之后,数据库的完整性约束没有被破坏。

3.隔离性(isolated)

        事务的执行是互不干扰的,一个事物不可能看到其他事物运行时的数据。

        在并发环境中,当不同的事务同时操纵相同的数据时,每个事务都有各自的完整数据空间,也就是说并发访问数据库时,一个用户的事务不被其他事务所干扰,各并发事务之间数据库是独立的。

4.持久性(durable)

        在事务完成之后,该事物对数据库做的更改会持久的保存在数据库中,其他操作或故障不会对其具有任何影响。

事务基本操作:

        1.开启事务       start  transaction;

        2.提交事务        commit;

        3.回滚                  rollback;

事务提交的两种方式:

        1.自动提交

        mysql默认自动提交事务  

        2.手动提交

        需要先开启事务,然后设置事务提交方式

        set autocommit=0;默认为1.关闭自动提交需要设置为0.(注意如果设置了事务提交方式,在事务完成时需要开启自动提交,即将参数设置为1)

事务的隔离级别:

read uncommitted  读未提交     会产生脏读,不可重复读,幻读

read  committed    读已提交      会产生不可重复读,幻读

repeatable  read   可重复度     会产生幻读       

serializable    串行化         可解决所有问题

mysql数据库默认可重复读,oracle数据库默认读已提交

三.脏读概念

        指一个事务读取到其他事物没有提交的数据。

        例:先将隔离级别设置为读未提交

然后开启事务

 

将一号的500转到二号

 

 未提交事务,新开一个窗口查询表数据如下,可以看到表中数据已经改变

 

 

四.幻读

        一个事物操作数据库表中所有记录,另一个事务给该数据库添加数据,则第一个事物查询不到自己的修改

例:先将隔离级别设置为可重复读

开启事务

 

修改数据

新开一个窗口查询表,发现只有光标闪烁,查不到结果

将之前窗口事务提交

 

新的窗口显示数据

 

五.不可重复读

      在一个事务中,多次读到同一数据。在事务还没结束时,另外一个事务也访问该同一数据,那么,在第一个事物中的两次两次读数据之间,由于第二个事务的更改,第一个事物两次读到的数据可能是不一样的,这样就会发生一个事务中两次读到的数据不一致,称为不可重复读。

例:先将隔离级别设置为读已提交

开启事务

修改数据

同一窗口下查询同一表数据不一致

 

   


总结

        事务的隔离级别越高,数据的安全性越高,但是执行效率会越来越低,在实际应用中应根据不同需求选择合适的隔离级别。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值