一、基本介绍
1、概念
如果一个包含多个步骤的业务操作,被事务管理,那么这些操作要么同时成功,要么同时失败;
2、操作
①开启事务:start transaction;
②回滚:rollback;
③提交:commit;
案例:
3、MySql数据库中事务默认自动提交
事务自动提交:一条DML(增删改)语句会自动提交一次事务;
事务手动提交:手动开启事务(start transaction),需要手动提交(commit);
修改事务的默认提交方式:
-- 查看默认的提交方式
select @@autocommit; -- 1代表自动提交 0代表手动提交
-- 修改默认的提交方式
set @@autocommit = 0;
二、事务的四大特征(常见面试题)
1、原子性:是不可分割的最小操作单位,要么同时成功,要么同时失败;
2、持久性:当事务提交或回滚后,数据库会持久化地保存数据;
3、隔离性:多个事物之间相互独立;(实际上,多个事物之间会产生影响,需要进行手动隔离(类似Java多线程里面,需要锁机制))
4、一致性:事务操作前后,数据总量不变;
三、事务的隔离级别(了解)
1、概念:
多个事务之间是相互独立的,但是多个事务同时操作同一批数据则会引发一些问题,设置不同的隔离级别就可以解决这些问题;
2、存在问题
①脏读:一个事务读取到另一个事务中没有提交的数据;
②不可重复读(虚读):在同一个事务中,两次读到的数据不一样;
③幻读:一个事务(DML)数据表中所有记录,另一个事务添加了一条数据,则第一个事务查询不到自己的修改;
3、4 大隔离级别
①read uncommited:读未提交
产生的问题:脏读、不可重复读(虚读)、幻读;
②read commited:读已提交
产生的问题:不可重复读(虚读)、幻读;
③repeatable read:可重复读(MySql默认)
产生的问题:幻读;
④serializable:串行化
可以解决所有问题;
注意:隔离级别越高,则安全性越高,但效率越低;
4、设置数据库隔离级别
查询数据库隔离级别:
select @@tx_isolation;
设置数据库隔离级别:
set global transaction isolation level 级别字符串;
标签:事务,隔离,幻读,默认,012,提交,MySQL,级别 From: https://blog.51cto.com/u_13272819/6079190