脚本宝典收集整理的这篇文章主要介绍了【MySQL系列】MySQL事务知识点,脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。
ACID(AtomicITy、Consistency、Isolation、Durability,即原子性、一致性、隔离性、持久性)
开启事务:两个都可以
begin;
start transaction;
提交事务
commit;
回滚事务
rollback;
查看当前对话的隔离级别
select @@tx_isolation;
查看系统当前的隔离级别
select @@global.tx_isolation;
设置会话级隔离级别为读未提交:
set session transaction isolation level read uncommitted;
设置全局级隔离级别为读未提交:
set global transaction isolation level read uncommitted;
设置自动提交
set autocommit = 0/1; (0为不自动提交,1为自动提交)
从上往下,并发性越来越差,安全性越来越高。
读未提交
Read UnCommitted。一个事务可以看到另一个事务未提交的数据。一般很少用。
带来的问题:脏读。
读已提交
Read Commited,简称RC。大多数数据库系统默认RC。
定义:一个事务开始时,只能"看见"已经提交的事务做的修改,也就是说:一个事务从开始到提交之前,所做的任何修改对其他事务都是不可见的。
带来的问题:不可重复读,即两次执行相同的查询,可能会得到不同的结果。
可重复读
RePEatable Read,简称RR。
同一个事务多次读取同样的记录的结果是一致的。
带来的问题:幻读,即当某个事务在读取某个范围内的记录时,另一个事务又在该范围插入了新的记录,当某个事务再次读取该范围内的记录时,会产生幻行。
InnoDB和XtraDB通过MVCC解决了幻读的问题。
Serializable。读写都会加锁,锁住整张表,很少用。
通过强制事务串行执行,避免幻读问题。Serializable会在每一行数据上都加锁,所以可能会导致大量超时和锁争用的问题。
使用Mysql命令对数据库进行操作。
查询mysql的默认事务隔离级别的命令:REPEATABLE-READ
执行的内容:在事务A开启读未提交时,事务B更新数据时,事务A就能查到数据。
事务B做操作:开启读未提交命令,还未提交事务,事务A就能查到数据。一旦客户端B的事务因为某种原因回滚,所有的操作都将会被撤销,那客户端A查询到的数据其实就是脏数据。
什么是长事务?其实就是运行时间比较长的未提交的事务。
select * From information_schema.innodb_trx;
这个表中记录了所有正在运行的事务信息,里面有事务的开始时间。可以从这里看出哪些事务运行的时间比较长。
事务如何传播:即方法A传播到方法B。那方法A到方法B,方法A和B中分别要么有事务,要么没有事务。那在传播时有如下的行为:
目前,Spring在TransactionDefinition类中定义了以下7种传播特性,具体特性我们接下来会分析:
死锁是指两个或者多个事务互相争夺同一个资源导致的。两个或者多个事务在同一个资源上相互占用,并请求锁定对方占用的资源,从而产生恶性循环的现象。当多个事务试图以不同的顺序锁定资源时,就可能会产生死锁。
数据库系统实现了各种死锁检测和死锁超时检测。InnoDB可以检测到死锁的循环依赖,并立即返回一个错误。InnoDB目前处理死锁的方法是,将持有最少行级排它锁的事务进行回滚(这是相对比较简单的死锁回滚算法)。
锁的行为和顺序是和存储引擎有关的。不同存储引擎在执行语句时,有些会产生死锁,有些则不会。
只有部分或者全部的事务回滚时,才能打破死锁。所以在程序设计时需要考虑如何处理死锁。
Mysql常用命令行大全
MySQL的四种事务隔离级别
Transaction 那点事儿
以上是脚本宝典为你收集整理的【MySQL系列】MySQL事务知识点全部内容,希望文章能够帮你解决【MySQL系列】MySQL事务知识点所遇到的问题。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。