1、在MYSQL数据库管理系统中,事务的提交和回滚
在MYSQL数据库管理系统中,默认情况下,事务是自动提交的,也就是说,只要执行一条DML语句,开启了事务,并且提交了事务
这种自动提交机制是可以关闭的[关闭的第一种方式]
start transaction;手动开启事务
DML语句...
DML语句...
DML语句...
DML语句...
commit;手动提交事务【事务成功的结
start transaction;手动开启事务
DML语句...
DML语句...
DML语句...
DML语句...
rollback;手动回滚事务【事务失败的结束】
show variables like '%commit%'; 查看提交的value
关闭自动提交的第二种方式
set autocomit = off;
或者
set session autocommit = on;
以上打开和关闭自动提交机制,只对当前会话有效
2、事务四个特性之一:隔离性(isolation)
1、事务A和事务B之间具有一定的隔离性
2、隔离性有隔离级别(4个)
read uncommitted 读未提交
read committed 读已提交
repeatable read 可重复读
serializable 串行化
3、read uncommitted 读未提交
事务A和事务B,事务A未提交的数据,事务B可以读取到
这里读取到的数据可以叫做“脏数据”或者叫做"Dirty Read"
这种隔离级别是最低界别的,这种级别一般都是在理论上存在的,数据库默认的隔离级别一般都是高于该级别的
4、read committed 读已提交
事务A和事务B,事务A提交的数据,事务B才能读取到
这种隔离级别高于上面的读未提交
换句话说:对方事务提交之后的数据,我当前事务才能够读取到
这种隔离级别可以避免脏数据
这种隔离级别会导致“不可重复读”
Oracle数据库管理系统默认的隔离级别就是:读已提交
5、repeatable read 可重复读
事务A和事务B,事务A提交之后的数据,事务B读取不到
事务B是可重复读取数据的
这种隔离级别高于读已提交
换句话说:对方提交之后的数据读取不到
这种隔离级别可以避免“脏读和不可重复读取”,打到可重复读取
MySQL数据库管理系统默认的隔离级别就是可重复读
6、Serializable 串行化
事务A和事务B,事务A在操作数据库表中数据的时候,事务B只能排队等待
这种事务隔离级别一般很少使用,吞吐量太低,用户体验不好
这种隔离基本可以避免“幻象读”,每一次读取的都是数据库表中真实的数据
事务A和事务B不再并发
这里写代码片