在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
1、事务具有ACID特性
2、事务的隔离级别 1)隔离级别的定义与问题
2)如果查看修改和MySQL的隔离级别 show variables like 'tx_isolation'; # 查看隔离级别,MySQL8以前 show variables like 'transaction_isolation'; # 查看隔离级别,MySQL8 set global transaction_isolation='READ-COMMITTED'; // 设置隔离级别,阀域READ-UNCOMMITTED、READ-COMMITTED、REPEATABLE-READ、SERIALIZABLE 事务的隔离级别可以是Session层的,我们可以对不同的Session设置不同级别: set session transaction isolation level read uncommitted; set session transaction isolation level read committed; set session transaction isolation level repeatable read; set session transaction isolation level serializable; 3)Spring事务隔离级别 Spring事务默认使用数据库的隔离级别,可以通过注解@Transactional中的isolation参数调整Session级的隔离级别。隔离级别是会话级别的,JDBC的java.sql.Connection接口支持隔离级别的设置。 Spring在开启事务时(DataSourceTransactionManager.doBegin),根据注解配置,对Connection的隔离级别进行设置: MySQL驱动com.mysql.cj.jdbc.ConnectionImpl执行SQL语句调整会话级的隔离级别 3、死锁 死锁是指两个或多个事务在同一资源上相互占用,并请求锁定对方占用的资源,从而导致恶性循环。死锁示例: # 事务一 start transaction; update account set money=10 where id=1; update account set money=20 where id=2; commit; # 事务二 start transaction; update account set money=10 where id=2; update account set money=20 where id=1; commit; 假设碰巧,事务一和事务二同时执行完第一个update语句,接着准备执行第二条update语句,却发现记录已被对方锁定,然后2个事务都等待对方释放资源,同时持有对方需要的锁,这样就会出现死循环。 为了避免死锁问题,数据库实现了各种死锁检测和死锁超长机制,InnoDB处理死锁的方式是:将持有最少行级排他锁的事务进行回滚。 以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持极客世界。 |
请发表评论