事务

一组事务,要么同时成功,要么同时失败

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)    收藏  举报

导航