网站建设与应用,进出石家庄最新通知,免费制作logo的网站,数字化营销MySQL 事务隔离事务隔离实现事务的启动ACID : 原子(Atomicity)、一致(Consistency)、隔离(Isolation)、永久(Durability)
多个事务可能出现问题 : 脏读 (dirty read) , 不可重复读 (non-repeatable read) , 幻读 (phantom read)
事务隔离级别 :
读未提交 (read uncommitted)…
MySQL 事务隔离事务隔离实现事务的启动ACID : 原子(Atomicity)、一致(Consistency)、隔离(Isolation)、永久(Durability)
多个事务可能出现问题 : 脏读 (dirty read) , 不可重复读 (non-repeatable read) , 幻读 (phantom read)
事务隔离级别 :
读未提交 (read uncommitted) : 事务没提交时做的变更能被其他事务看到读提交 (read committed) : 事务提交后做的变更被其他事务看到可重复读 (repeatable read) : 与事务启动时 看到的数据一致串行化 (serializable) : 对同一行记录 , 进行读写锁。当读写锁冲突时后访问的事务要等前个事务执行完成才能继续执行
隔离级别例子 :
读未提交 : V1 2 : 事务 B 还没有提交但能被 A 看到。V2、V3 2读提交 : V1 1V2 2。事务 B 提交后才能被 A看到。 V3 2可重复读 : V1、V2 1 : 事务中看到的数据都是一致的。V3 2串行化 : 在事务 B 执行 将 1 改成 2时锁住。直到事务 A 提交后事务 B 才能执行。V1、V2 1V3 2 查看隔离级别 :
show variables like transaction_isolation;---------------------------------------
| Variable_name | Value |
---------------------------------------
| transaction_isolation | READ-COMMITTED |
---------------------------------------事务隔离实现
每条记录在更新时 , 都会记录一条回滚操作
记录上的最新值通过回滚操作都能得到前一个状态的值数据库的多版本并发控制 (MVCC) : 同一条记录在系统中能存在多个版本当没有事务用到这些回滚日志时 (没有比该回滚日志更早的 read-view )回滚日志会被删除 事务的启动
事务启动方式 :
显式启动事务 : begin 或 start transaction, 提交 : commit , 回滚 : rollbackset autocommit0: 将该线程的自动提交关掉。该事务只有主动执行 commit 或 rollback 或断开连接 才结束
注意点 :
建议用 set autocommit1, 通过显式启动事务 , 避免意外的长事务当连续开启事务用 commit work and chain (提交事务并自动启动下个事务) : 省了再次执行 begin 的开销
查询长事务 :
select *
from information_schema.innodb_trx
where TIME_TO_SEC(timediff(now(), trx_started)) 60