事务
一组事务,要么同时成功,要么同时失败
1. 手动提交:
set autocommit=False或者0
作用范围是一次连接
一组sql语句,知道commit或者rollback才算结束
只能用于命令行
/*
start TRANSACTION;
insert into employee values(9,'刘888',2000,2,'女');
COMMIT;
*/
/*
start TRANSACTION;
insert into employee values(10,'刘100',2000,2,'女');
ROLLBACK;
*/
2. 自动提交
mysql默认情况下是自动提交事务:即执行一句,执行依据,一旦提交,就不能回滚
用于Java
3. 隔离级别
保证事务的独立性,但是很多时候,事物之间是相互影响的,两个事务对同一个表的修改
java中就是线程安全问题
mysql默认的隔离级别:
(1)READ-UNCOMMITED:读取未提交的数据
(2)READ-COMMITED:读取已提交的数据
(3)REPEATABLE-READ:可重复读取的数据
(4)SERIALIZABLE:序列化
查询隔离级别:select @@tx_isolation
设置隔离级别:set tx_isolation='READ-UNCOMMITED'
(1)脏读--修改
如果当前连接的隔离级别是READ-UNCOMMITED,你会读到别人修改还未提交的数据
避免:提高到READ-COMMITED及以上
(2)不可重复读--修改
一个事务读取了另一个事务已经提交的数据,导致一个事务期间对同一个数据的前后两次读取结果不同
事务结束后,再次查看,可以查到另一事务已经提交的数据
避免:提高到REPEATABLE-READ及以上
(3)幻读--增加或者删除
一个事务读取了另一个事务新增或者删除并已提交的数据,导致一个事务期间记录数发生变化
避免:提高到REPEATABLE-READ及以上
(4)REPEATABLE-READ与SERIALIZABLE区别
SERIALIZABLE锁表,别的事务不能修改同一张表
REPEATABLE-READ锁行,别的事务不能修改同一行数据
posted on 2020-06-21 08:00 happygril3 阅读(135) 评论(0) 收藏 举报
浙公网安备 33010602011771号