MySQL事务

1. 事务操作

查看/设置事务提交方式 

-- 查看当前事务提交模式,0为手动提交,1为自动提交
select @@autocommit;

set @@autocommit = 0; -- 设置为手动提交事务,0为手动提交,1为自动提交

 开启事务

start transaction;

提交事务

commit;

回滚事务

rollback;

2. 事务的四大特性(ACID)

MySQL事务_第1张图片 3. 并发事务问题

MySQL事务_第2张图片

 脏读,就是一个事务读到另一个事务还未提交的数据。

假设事务A,执行了select查询操作,并且对查询出来的数据进行修改,此时事务还未提交,这是事务B进来select查询数据。查到了A事务修改后的数据。此时就是出现了脏读现象。

MySQL事务_第3张图片

不可重复读,就是同一个事务,两次查询到的数据不相同。

假设A事务第一次select查询出数据,此时B事务对此数据进行了update修改操作,并提交了事务。这时候数据发生了改变,A事务又进行查询了一次。导致A事务两次查询出来的数据不一样。此时就是出现了不可重复读的现象。

MySQL事务_第4张图片 

 幻读,就是一个事务按照某个条件进行查询数据后,没有此类数据。但是在插入数据的时候,又发现该数据已经存在,好像幻影一样。

假设A事务查询某个条件时,发现没有数据,准备插入此类数据。就在A事务插入之前,B事务进行了此类数据的插入并进行了tijiao,此时就会导致A事务插入失败,再次select查询此类数据,又存在了。此时就是出现了幻读现象。

MySQL事务_第5张图片

 4. 事务隔离级别

包括读未提交(Read uncomitted)、读已提交(Read committed)、可重复读(Repeatable Read)、串行化(Serializable)

MySQL事务_第6张图片

查看事务的隔离级别

select @@transaction_isolation;

 设置事务的隔离级别

-- 设置当前会话的隔离级别为读未提交
set session transaction isolation level Read uncommitted

这里建议独自开两个会话,模拟出并发事务问题,并设置对应的隔离级别,试验四大隔离级别特性。不多赘述。

 

你可能感兴趣的:(SQL学习,mysql,数据库)