重庆荣昌网站建设价格,长寿网站建设,wordpress 极速模板,哈尔滨做网站seo1.ACID
关系型数据库都有ACID特性
原子性#xff08;Atomicity#xff09; #xff1a; 事务是最小的执行单位#xff0c;不允许分割。事务的原子性确保动作要么全部完成#xff0c;要么完全不起作用#xff1b;一致性#xff08;Consistency#xff09;#xff1a;…1.ACID
关系型数据库都有ACID特性
原子性Atomicity 事务是最小的执行单位不允许分割。事务的原子性确保动作要么全部完成要么完全不起作用一致性Consistency 执行事务前后数据保持一致例如转账业务中无论事务是否成功转账者和收款人的总额应该是不变的隔离性Isolation 并发访问数据库时一个用户的事务不被其他事务所干扰各并发事务之间数据库是独立的持久性Durability 一个事务被提交之后。它对数据库中数据的改变是持久的即使数据库发生故障也不应该对其有任何影响。
只有保证了AID才能保持C。
2.并发带来的问题
1.脏读
此时一个事务读取数据并修改了数据修改对其他事务是可见的但是此事务未提交。另一个事务读取了这个未提交的数据第一个事务回滚未将数据提交到数据库。第二个事务读取到的数据就是脏读。
2.不可重复读
指一个事务多次读取同一数据。
两个事务同时读取一个数据第一个事务修改数据第二事务再次读取得到修改后的数据此时第二个事务读取的数据不一致。
3.幻读
第一个事务读取数据第二个事务插入一些数据之后第一个事务查询发现多了些原本不存在的数据如同幻觉一般。
不可重复读侧重于数据内容修改或者记录减少。
幻读侧重于记录新增。
3.事务隔离级别
READ-UNCOMMITTED(读取未提交) 最低的隔离级别允许读取尚未提交的数据变更可能会导致脏读、幻读或不可重复读。READ-COMMITTED(读取已提交) 允许读取并发事务已经提交的数据可以阻止脏读但是幻读或不可重复读仍有可能发生。REPEATABLE-READ(可重复读) 对同一字段的多次读取结果都是一致的除非数据是被本身事务自己所修改可以阻止脏读和不可重复读但幻读仍有可能发生。SERIALIZABLE(可串行化) 最高的隔离级别完全服从 ACID 的隔离级别。所有的事务依次逐个执行这样事务之间就完全不可能产生干扰也就是说该级别可以防止脏读、不可重复读以及幻读。
mysql默认可重复读。
4.InnoDB支持的行锁
记录锁Record Lock 也被称为记录锁属于单个行记录上的锁。间隙锁Gap Lock 锁定一个范围不包括记录本身。临键锁Next-Key Lock Record LockGap Lock锁定一个范围包含记录本身主要目的是为了解决幻读问题MySQL 事务部分提到过。记录锁只能锁住已经存在的记录为了避免插入新记录需要依赖间隙锁。
5.意向锁
使用表锁时如何判断表的记录中有没有行锁依次遍历性能太差。使用意向锁快速判断是否可以对某个表使用表锁。
意向共享锁Intention Shared LockIS 锁事务有意向对表中的某些记录加共享锁S 锁加共享锁前必须先取得该表的 IS 锁。意向排他锁Intention Exclusive LockIX 锁事务有意向对表中的某些记录加排他锁X 锁加排他锁之前必须先取得该表的 IX 锁。
意向锁是有数据引擎自己维护的用户无法自己手动操作意向锁在为数据行加共享/排他锁之前InnoDB会先获取该数据行所在数据表的对应意向锁。
意向锁之间是相互兼容的。
意向锁和共享锁、排他锁表级之间只有意向共享锁和表级共享锁兼容。