常设中国建设工程法律论坛网站,2022年必火的创业项目加盟,建设网站总结报告,哪个网站做外贸概述事务就是数据库为了保证数据的原子性,持久性,隔离性,一致性而提供的一套机制, 在同一事务中, 如果有多条sql执行, 事务可以确保执行的可靠性.数据库事务的四大特性一般来说, 事务是必须满足 4 个条件#xff08;ACID#xff09;#xff1a;原子性#xff08;AtomicityACID原子性Atomicity或称不可分割性、一致性Consistency、隔离性Isolation又称独立性、持久性Durability。1.原子性 一个事务中的所有操作, 要么全都执行, 要么全都不执行, 事务如果在执行过程中发生错误, 会回滚到事务开始执行前的状态.2.持久性 事务处理结束后, 对数据的修改是永久的, 系统故障也不会丢失3.隔离性 多个并发事务在同时对数据进行读写操作时, 隔离性可以防止多个事务并发执行时导致的数据不一致的问题, 事务隔离分为不同级别包括读未提交Read uncommitted、读提交read committed、可重复读repeatable read和串行化Serializable4.一致性 在事务开始之前和事务结束以后数据库的完整性没有被破坏。这表示写入的数据必须完全符合所有的预设规则, 前三个事务的特性都是为了保证事务的一致性.事务的一些设置 默认情况下, mysql启动的是自动提交事务模式变量 autocommit 为 ON,只要你执行 DML 操作的语句,MySQL 会立即隐式提交事务.mysql处理事务的两种方法:1.用 BEGIN, ROLLBACK, COMMIT 来实现BEGIN; / START TRANSACTION; 开始一个事务ROLLBACK 事务回滚COMMIT 事务确认2. 直接用 SET 来改变 MySQL 的自动提交模式: SET GLOBAL autocommit0; 禁止自动提交 SET GLOBAL autocommit1;开启自动提交3.查看 autocommit 模式 SHOW GLOBAL VARIABLES LIKE autocommit;事务的隔离级别为什么要有隔离级别MySQL 是一个服务器客户端架构的软件对于同一个服务器来说可以有若干个客户端与之连接每个客户端与服务器连接上之后就可以称之为一个会话。我们可以同时在不同的会话里输入各种语句这些语句可以作为事务的一部分进行处理。不同的会话可以同时发送请求也就是说服务器可能同时在处理多个事务这样子就会导致不同的事务可能同时访问到相同的记录。我们前边说过事务有一个特性称之为隔离性理论上在某个事务对某个数据进行访问时其他事务应该进行排队当该事务提交之后其他事务才可以继续访问这个数据。但是这样子的话对性能影响太大所以设计数据库的大叔提出了各种隔离级别来最大限度的提升系统并发处理事务的能力, 只有 InnoDB 支持事务所以这里说的事务隔离级别是指 InnoDB 下的事务隔离级别.1.查看隔离级别SELECT global.transaction_isolation,transaction_isolation;mysql默认的隔离级别是可重复读Mysql 数据提供四种不同级别的隔离级别,实际开发中可以根据不同的需要场景选择不同的隔离级别,除了串行级别以外其他级别都会存在某种问题. 2.设置隔离级别设置全局隔离级别: SET GLOBAL TRANSACTION ISOLATION LEVEL READ UNCOMMITTED设置会话隔离级别: SET SESSION TRANSACTION ISOLATION LEVEL READ UNCOMMITTED(1)读未提交(read uncommitted)一个事务读取到另一个事务未提交的修改, 会带来脏读, 不可重复读, 幻读的问题第一个事务向表中插入了一条数据,但还未提交, 另一个事务就读到了表中插入的数据, 但第一个事务进行了回滚操作, 所以另一个事务读到的数据并不可靠, 读到了脏数据.(2)读已提交(read committed)一个事务只能读取另一个事务已经提交的修改, 避免了脏读的问题, 但还存在不可重复读, 幻读的问题如果事务1向表中插入了一条数据但还未提交,事务2读取了一下数据,事务1再提交后, 事务2再次读取,读取到的数据不是之前读取到的数据, 这就出现了不可重复读的问题, 因为一个事务并不影响另一个事务, 所以一个事务中读到的数据始终应该是一致的.(3)可重复读(repeatable read MySQL 默认隔离级别)同一个事务中多次读取相同的数据结果始终是一样的, 避免了不可重复读, 但存在幻读的问题正常情况下一般不会出现幻读的问题, 只有在执行select ... for update才会出现幻读, 幻读也就是一个事务中两次读到的结果不一致, 幻读和不可重复读相似, 两者的区别在于前者侧重于insert语句的情况, 后者侧重于update, delete的语句(4)串行化(serializable)事务串行执行可以避免以上所有问题, 原理就是加锁, 一个事务在执行的过程中, 另一个事务要等待前一个事务回滚或者提交事务从而释放锁, 但性能不好事务的实现原理MySQL 的日志有很多种如二进制日志、错误日志、查询日志、慢查询日志等此外 InnoDB 存储引擎还提供了两种事务日志redolog(重做日志)和undolog(回滚日志)。其中 redolog 用于保证事务持性undolog 则是事务原子性和隔离性实现的基础。原子性实现实现原子性的关键是当事务回滚时能够撤销所有已经成功执行的 sql 语句。InnoDB 实现回滚靠的是 undo log当事务对数据库进行修改时InnoDB会生成对应的 undo log如果事务执行失败或调用了 rollback导致事务需要回滚便可以利用 undo log 中的信息将数据回滚到修改之前的样子。undo log 属于逻辑日志它记录的是 sql 执行相关的信息。当发生回滚时InnoDB 会根据 undo log 的内容做与之前相反的工作对于每个 insert回滚时会执行 delete对于每个 delete回滚时会执行 insert对于每个 update回滚时会执行一个相反的 update把数据改回去持久性实现redo log 叫做重做日志是保证事务持久性的重要机制。当 mysql 服务器意外崩溃或者宕机后保证已经提交的事务确定持久化到磁盘中的一种措施。innodb 是以页为单位来管理存储空间的任何的增删改差操作最终都会操作完整的一个页会将整个页加载到 buffer pool 中然后对需要修改的记录进行修改修改完毕不会立即刷新到磁盘而且仅仅修改了一条记录刷新一个完整的数据页的话过于浪费了。但是如果不立即刷新的话数据此时还在内存中如果此时发生系统崩溃最终数据会丢失的因此权衡利弊引入了 redo log也就是说修改完后不立即刷新而是记录一条日志日志内容就是记录哪个页面多少偏移量什么数据发生了什么变更。这样即使系统崩溃再恢复后也可以根据 redo 日志进行数据恢复。另外redo log 是循环写入固定的文件是顺序写入磁盘的.隔离级别实现原理(MVCC)MVCC多版本并发控制 Multi-Version Concurrent Control是MySQL 提高性能的一种方式配合 Undo log 和版本链,让不同事务的读-写、写-读操作可以并发执行从而提升系统性能。MVCC 使得数据库读不会对数据加锁普通的 SELECT 请求不会加锁提 高 了 数 据 库 的 并 发 处 理 能 力 。 借 助 MVCC 数 据 库 可 以 实 现 READCOMMITTEDREPEATABLE READ 等隔离级别InnoDB 的 MVCC 是通过在每行记录后面保存两个隐藏的列来实现的。一个保存了行的事务 IDTRX_ID一个保存了行的回滚指针ROLL_PT。trx_id每次对某记录进行改动时都会把对应的事务 id 赋值给 trx_id隐藏列。roll_pt每次对记录进行改动时都会把旧的版本写入到 undo 日志中然后这个隐藏列就相当于一个指针可以通过它来找到该记录修改前的信息。对该记录每次更新后都会将旧值放到一条 undolog 中就算是该记录的一个旧版本随着更新次数的增多所有的版本都会被 roll_pt 属性连接成一个链表我们把这个链表称之为版本链版本链的头节点就是当前记录最新的值。另外每个版本中还包含生成该版本时对应的事务 id这个信息很重要。ReadView 是什么ReadView 是“快照读”SQL 执行时 MVCC 提取数据的依据读已提交级别: 称为当前读,当每个事物每次读取时,会生成一个 readVew,读取的是最新数据. 可重复读级别: 称为快照读,当一个事务第一次查询时,会生成一个 readView,第二次查询时仍会从当前 readView 中读数据锁机制概述首先来看两个事务的写操作之间的相互影响。隔离性要求同一时刻只能有一个事务对数据进行写操作InnoDB 通过锁机制来保证这一点。锁机制的基本原理可以概括为事务在修改数据之前需要先获得相应的锁获得锁之后事务便可以修改数据该事务操作期间这部分数据是锁定的其他事务如果需要修改数据需要等待当前事务提交或回滚后释放锁。按照粒度锁可以分为表锁、行锁以及其他位于二者之间的间隙锁。表锁在操作数据时会锁定整张表并发性能较差行锁则只锁定需要操作的数据并发性能好。但是由于加锁本身需要消耗资源(获得锁、检查锁、释放锁等都需要消耗资源)因此在锁定数据较多情况下使用表锁可以节省大量资源。MySQL中不同的存储引擎支持的锁是不一样的例如 MyIsam 只支持表锁而 InnoDB同时支持表锁和行锁且出于性能考虑绝大多数情况下使用的都是行锁。1.行锁行级锁是 Mysql 中锁定粒度最细的一种锁表示只针对当前操作的行进行加锁。行级锁能大大减少数据库操作的冲突。其加锁粒度最小但加锁的开销也最大。行级锁分为共享锁 和 排他锁。特点开销大加锁慢会出现死锁锁定粒度最小发生锁冲突的概率最低并发度也最高。 2.间隙锁锁的是一个区间,当我们用范围条件而不是相等条件检索数据InnoDB 会给符合条件的已有数据记录的索引项加锁对于键值在条件范围内但并不存在的记录叫做“间隙,InnoDB 也会对这个“间隙”加锁这种锁机制就是所谓的间隙锁Next-Key 锁3.表锁表级锁是 MySQL 中锁定粒度最大的一种锁表示对当前操作的整张表加锁它实现简单资源消耗较少被大部分 MySQL 引擎支持。最常使用的MYISAM 与 INNODB 都支持表级锁定。表级锁定分为表共享锁与表排他锁。特点开销小加锁快不会出现死锁锁定粒度大发出锁冲突的概率最高并发度最低共享锁S又称读锁。允许一个事务去读一行阻止其他事务获得相同数据集的排他锁。若事务 T 对数据对象 A 加上 S 锁则事务 T 可以读 A 但不能修改A其他事务只能再对 A 加 S 锁而不能加 X锁直到 T 释放 A 上的 S 锁。这保证了其他事务可以读 A但在 T 释放 A 上的 S 锁之前不能对 A 做任何修改。排他锁又称写锁。允许获取排他锁的事务更新数据阻止其他事务取得相同的数据集共享读锁和排他写锁。若事务 T 对数据对象 A 加上 X 锁事务 T可以读 A 也可以修改 A其他事务不能再对 A 加任何锁直到 T 释放 A 上的锁。update,delete,insert 都会自动给涉及到的数据加上排他锁select 语句默认不会加任何锁类型如果加排他锁可以使用 select …for update 语句加共享锁可以使用 select … lock in share mode 语句。
文章转载自: http://www.morning.qlhwy.cn.gov.cn.qlhwy.cn http://www.morning.qqnh.cn.gov.cn.qqnh.cn http://www.morning.jhrkm.cn.gov.cn.jhrkm.cn http://www.morning.wdpt.cn.gov.cn.wdpt.cn http://www.morning.mnnxt.cn.gov.cn.mnnxt.cn http://www.morning.ntgsg.cn.gov.cn.ntgsg.cn http://www.morning.tgmfg.cn.gov.cn.tgmfg.cn http://www.morning.kmjbs.cn.gov.cn.kmjbs.cn http://www.morning.gkmwx.cn.gov.cn.gkmwx.cn http://www.morning.haibuli.com.gov.cn.haibuli.com http://www.morning.ytfr.cn.gov.cn.ytfr.cn http://www.morning.xfxqj.cn.gov.cn.xfxqj.cn http://www.morning.ntzbr.cn.gov.cn.ntzbr.cn http://www.morning.gmgyt.cn.gov.cn.gmgyt.cn http://www.morning.thjqk.cn.gov.cn.thjqk.cn http://www.morning.fhsgw.cn.gov.cn.fhsgw.cn http://www.morning.qtwd.cn.gov.cn.qtwd.cn http://www.morning.fdzzh.cn.gov.cn.fdzzh.cn http://www.morning.rmtmk.cn.gov.cn.rmtmk.cn http://www.morning.bloao.com.gov.cn.bloao.com http://www.morning.w58hje.cn.gov.cn.w58hje.cn http://www.morning.wyppp.cn.gov.cn.wyppp.cn http://www.morning.mlyq.cn.gov.cn.mlyq.cn http://www.morning.mxmzl.cn.gov.cn.mxmzl.cn http://www.morning.pigcamp.com.gov.cn.pigcamp.com http://www.morning.qineryuyin.com.gov.cn.qineryuyin.com http://www.morning.ccyns.cn.gov.cn.ccyns.cn http://www.morning.jtwck.cn.gov.cn.jtwck.cn http://www.morning.hphrz.cn.gov.cn.hphrz.cn http://www.morning.fpjw.cn.gov.cn.fpjw.cn http://www.morning.wgkz.cn.gov.cn.wgkz.cn http://www.morning.gmgnp.cn.gov.cn.gmgnp.cn http://www.morning.sgmis.com.gov.cn.sgmis.com http://www.morning.htrzp.cn.gov.cn.htrzp.cn http://www.morning.nzmw.cn.gov.cn.nzmw.cn http://www.morning.tktyh.cn.gov.cn.tktyh.cn http://www.morning.qsyyp.cn.gov.cn.qsyyp.cn http://www.morning.mxbks.cn.gov.cn.mxbks.cn http://www.morning.frtb.cn.gov.cn.frtb.cn http://www.morning.bpmnx.cn.gov.cn.bpmnx.cn http://www.morning.qfkxj.cn.gov.cn.qfkxj.cn http://www.morning.mbfkt.cn.gov.cn.mbfkt.cn http://www.morning.ryspp.cn.gov.cn.ryspp.cn http://www.morning.ymwrs.cn.gov.cn.ymwrs.cn http://www.morning.yhjlg.cn.gov.cn.yhjlg.cn http://www.morning.xtrnx.cn.gov.cn.xtrnx.cn http://www.morning.pwghp.cn.gov.cn.pwghp.cn http://www.morning.pcgmw.cn.gov.cn.pcgmw.cn http://www.morning.junmap.com.gov.cn.junmap.com http://www.morning.bfcxf.cn.gov.cn.bfcxf.cn http://www.morning.zgpgl.cn.gov.cn.zgpgl.cn http://www.morning.dqxnd.cn.gov.cn.dqxnd.cn http://www.morning.sjwzl.cn.gov.cn.sjwzl.cn http://www.morning.wjfzp.cn.gov.cn.wjfzp.cn http://www.morning.fwnyz.cn.gov.cn.fwnyz.cn http://www.morning.zlrsy.cn.gov.cn.zlrsy.cn http://www.morning.xlxmy.cn.gov.cn.xlxmy.cn http://www.morning.ryjl.cn.gov.cn.ryjl.cn http://www.morning.tmfm.cn.gov.cn.tmfm.cn http://www.morning.wxqmc.cn.gov.cn.wxqmc.cn http://www.morning.ohmyjiu.com.gov.cn.ohmyjiu.com http://www.morning.bssjz.cn.gov.cn.bssjz.cn http://www.morning.sgnxl.cn.gov.cn.sgnxl.cn http://www.morning.xjqkh.cn.gov.cn.xjqkh.cn http://www.morning.tnyanzou.com.gov.cn.tnyanzou.com http://www.morning.rnzwh.cn.gov.cn.rnzwh.cn http://www.morning.kcypc.cn.gov.cn.kcypc.cn http://www.morning.frpb.cn.gov.cn.frpb.cn http://www.morning.bxgpy.cn.gov.cn.bxgpy.cn http://www.morning.pqrhb.cn.gov.cn.pqrhb.cn http://www.morning.wbnsf.cn.gov.cn.wbnsf.cn http://www.morning.pyncm.cn.gov.cn.pyncm.cn http://www.morning.lyrgp.cn.gov.cn.lyrgp.cn http://www.morning.jjsxh.cn.gov.cn.jjsxh.cn http://www.morning.tymnr.cn.gov.cn.tymnr.cn http://www.morning.yfzld.cn.gov.cn.yfzld.cn http://www.morning.rnyhx.cn.gov.cn.rnyhx.cn http://www.morning.rcrnw.cn.gov.cn.rcrnw.cn http://www.morning.pqwhk.cn.gov.cn.pqwhk.cn http://www.morning.tdmgs.cn.gov.cn.tdmgs.cn