如何用照片做模板下载网站wordpress tinection模板

当前位置: 首页 > news >正文

如何用照片做模板下载网站,wordpress tinection模板,asp网站作业下载,h5网站建设参考资料#xff1a;小林coding 一、事务的特性ACID 原子性#xff08;Atomicity#xff09; 一个事务是一个不可分割的工作单位#xff0c;事务中的所有操作#xff0c;要么全部完成#xff0c;要么全部不完成#xff0c;不会结束在中间某个环节。原子性是通过 undo …参考资料小林coding 一、事务的特性ACID 原子性Atomicity 一个事务是一个不可分割的工作单位事务中的所有操作要么全部完成要么全部不完成不会结束在中间某个环节。原子性是通过 undo log回滚日志 来保证的。 一致性Consistency 事务操作前和操作后数据满足完整性约束数据库保持一致性状态。 隔离性Isolation 数据库允许多个并发事务同时对其数据进行读写和修改的能力隔离性可以防止多个事务并发执行时由于交叉执行而导致数据的不一致。多个事务并发执行时每个事务都看不到其他事务的中间状态。每个事务都应该感觉就像它是唯⼀在数据库上运行的事务⼀样。隔离性是通过 MVCC多版本并发控制 或锁机制来保证的。 持久性Durability ⼀旦事务被提交其结果将永久保存在数据库中即使系统发生故障。即使系统发生崩溃事务的结果也不应该丢失持久性是通过 redo log 重做日志来保证的。 二、脏读、不可重复读、幻读 并行事务是指多个事务同时执⾏这可以提高数据库系统的性能和吞吐量。

  1. 脏读读到其他事务未提交的数据 如果一个事务读到了另一个未提交事务修改过的数据就意味着发生了「脏读」现象。如果另⼀个事务后来回滚读取的数据就是无效的。
  2. 不可重复读前后读取的数据不⼀致 在一个事务内多次读取同一个数据如果出现前后两次读到的数据不一样的情况就意味着发生了不可重复读现象。在事务执⾏期间其他事务可能修改了数据。
  3. 幻读前后读取的记录数量不⼀致 在一个事务内多次查询某个符合查询条件的记录数量如果出现前后两次查询到的记录数量不一样的情况就意味着发生了幻读现象。在事务执⾏期间其他事务可能增加或删除了数据。 脏读、不可重复读、幻读的现象会对事务的一致性产生不同程度的影响。严重性排序如下 三、事务的隔离级别 SQL 标准提出了四种隔离级别来规避脏读、不可重复读、幻读的现象隔离级别越高性能效率就越低这四个隔离级别如下 读未提交read uncommitted指一个事务还没提交时它做的变更就能被其他事务看到读提交read committed指一个事务提交之后它做的变更才能被其他事务看到可重复读repeatable read指一个事务执行过程中看到的数据一直跟这个事务启动时看到的数据是一致的MySQL InnoDB 引擎的默认隔离级别串行化serializable 会对记录加上读写锁在多个事务对这条记录进行读写操作时如果发生了读写冲突的时候后访问的事务必须等前一个事务执行完成才能继续执行 隔离水平高低排序如下 针对不同的隔离级别并发事务时可能发生的现象也会不同。 在「读未提交」隔离级别下可能发生脏读、不可重复读和幻读现象在「读提交」隔离级别下可能发生不可重复读和幻读现象但是不可能发生脏读现象在「可重复读」隔离级别下可能发生幻读现象但是不可能脏读和不可重复读现象在「串行化」隔离级别下脏读、不可重复读和幻读现象都不可能会发生。 MySQL InnoDB 引擎的默认隔离级别虽然是「可重复读」但是它很⼤程度上可以避免幻读现象。解决的方案有两种 针对快照读普通 select 语句是通过 MVCC方式解决了幻读针对当前读select … for update 等语句是通过 next-key lock记录锁间隙锁方式解决了幻读 因为当执⾏ select … for update 语句的时候会加上 next-key lock如果有其他事务在 next-key lock 锁范围内插入那么这个插入语句就会被阻塞无法成功插入所以就很好了避免幻读问题。 隔离级别的实现 读未提交 可以读到未提交事务修改的数据直接读取最新的数据 串行化 通过加读写锁的方式来避免并行访问 读提交 和 可重复读 通过 Read View 实现区别在于创建 Read View 的时机不同可以把 Read View 理解成一个数据快照。读提交是在每个语句执行前都会重新生成一个 Read View而可重复读是启动事务时生成一个 Read View然后整个事务期间都在用这个 Read View。 Read View 在 MVCC 里如何工作的 Read View 有四个重要的字段 m_ids 指的是在创建 Read View 时当前数据库中「活跃事务」的事务 id 列表注意是一个列表“活跃事务”指的就是启动了但还没提交的事务。min_trx_id 指的是在创建 Read View 时当前数据库中「活跃事务」中事务 id 最小的事务也就是 m_ids 的最小值。max_trx_id 这个并不是 m_ids 的最大值而是创建 Read View 时当前数据库中应该给下一个事务的 id 值也就是全局事务中最大的事务 id 值 1creator_trx_id 指的是创建该 Read View 的事务的事务 id。 除此之外聚簇索引记录中还包含两个隐藏列  trx_id当一个事务对某条聚簇索引记录进行改动时就会把该事务的事务 id 记录在 trx_id 隐藏列里roll_pointer每次对某条聚簇索引记录进行改动时都会把旧版本的记录写入到 undo 日志中然后这个隐藏列是个指针指向每一个旧版本记录于是就可以通过它找到修改前的记录。 在创建 Read View 后我们可以将记录中的 trx_id 划分这三种情况 ⭐⭐⭐一个事务去访问记录的时候除了自己的更新记录总是可见之外还有这几种情况 如果记录的 trx_id 值小于 Read View 中的 min_trx_id 值表示这个版本的记录是在创建 Read View 前已经提交的事务生成的所以该版本的记录对当前事务可见。如果记录的 trx_id 值大于等于 Read View 中的 max_trx_id 值表示这个版本的记录是在创建 Read View 后才启动的事务生成的所以该版本的记录对当前事务不可见。如果记录的 trx_id 值在 Read View 的 min_trx_id 和 max_trx_id 之间需要判断 trx_id 是否在 m_ids 列表中 如果记录的 trx_id 在 m_ids 列表中表示生成该版本记录的活跃事务依然活跃着还没提交事务所以该版本的记录对当前事务不可见。如果记录的 trx_id 不在 m_ids列表中表示生成该版本记录的活跃事务已经被提交所以该版本的记录对当前事务可见。 这种通过「版本链」来控制并发事务访问同一个记录时的行为就叫 MVCC多版本并发控制。