首页 > 编程知识 正文

mysql事务详解,mysql大事务

时间:2023-05-06 05:59:58 阅读:222231 作者:982

mysql事务相关介绍 事务简介 事务就是一组原子性的SQL语句,或者说是一个独立的工作单元。事务内的语句,要么全部执行成功,要么全部执行失败。 事务的特性 原子性 事务是数据库的逻辑工作单元,事务中的各种操作要么都做,要么都不做。 一致性 事务执行的结果必须是使数据库从一个一致性状态转变成另一个一致性状态。当事务提交成功后,就说数据库处于一致性状态。相反,当事务执行过程中出现异常,某一条sql语句执行失败,事务提交失败,就说数据库处于不一致状态。 隔离性 事务的执行过程中不受其他事务的干扰。即一个事务内部的操作及使用的数据对其它并发事务是隔离的,并发执行的各个事务之间不能互相干扰。 持久性 指一个事务一旦提交,它对数据库中的数据的改变就应该是永久性的。接下来的其它操作或故障不应该对其执行结果有任何影响. 事务的隔离级别(由低到高) Read uncommitted(读未提交) 所有事务都可以看到其他未提交事务的执行结果当两个事务对同一个表进行操作时,共享数据读取未提交的数据,也被称之为脏读例如: A事务开启 B事务开启 A事务对user表进行了增加新用户操作 B事务读取所用user数据,其中包含了A事务的那条新增数据 A事务提交 B事务提交 Read committed(读提交) 读取提交的数据。但是,可能多次读取的数据结果不一致(不可重复读,幻读)。用读写的观点就是:读取的行数据,可以写。比如: A事务开启 B事务开启 B事务读取所有user表数据 userdata1 A事务添加一条用户数据到user表 A事务提交 B事务再次读取所有user表数据 userdata2,此时userdata2中包含了A事务新增的那条记录. B事务提交 Repeatable read(重复读) 它确保同一事务的多个实例在并发读取数据时,会看到同样的数据行.会出现幻读第一个事务对一个表中的数据进行了修改,这种修改涉及到表中的全部数据行。同时,第二个事务也修改这个表中的数据,这种修改是向表中插入一行新数据。那么,以后就会发生操作第一个事务的用户发现表中还有没有修改的数据行,就好象发生了幻觉一样。比如: A事务开启 B事务开启 B事务读取所有user表数据 userdata1 A事务添加一条用户数据到user表 A事务提交 B事务再次读取所有user表数据 userdata2,此时userdata2 = userdata1. B事务提交幻读: A事务开启 B事务开启 A事务更新所有user为超级用户 B事务新增一条数据 user为普通用户 A事务查询所有用户,发现了B事务新增的那条普通用户,出现幻读,命名全部更新了的啊 A事务提交 B事务提交 Serializable(序列化) 可读,不可写。像java中的锁,写数据必须等待另一个事务结束例如: A事务开启 B事务开启 A事务向User表新增数据 B事务向User表新增数据(失败:可读不可写) B事务读取user数据 A事务提交 B事务向User表新增数据(成功) B事务提交 Read Uncommited: 出现 脏读 , 不可重复读, 幻读Read commited : 出现 不可重复读, 幻读Repeatable read : 出现 幻读Serializable : 上述几个现象都不出现 mysql默认的隔离级别为Repeatable read(重复读)

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。