MYSQL(三)-------事务

事务

在主流的存储引擎中有INNODB和MYISAM,其中INNODB支持事务,MYISAM不支持事务

一系列DML(UPDATE,DELETE,INSERT)语句操作的集合叫做事务

MYSQL中事务是自动提交的,也就是一条DML语句就是自动提交为一个事务取执行

如果想自己提交DML语句集合的事务,必须设置set autocommit=0或者以begin;开始,以commit;或者rollback;结束。

显示提交:commit;结束

显示回滚:rollback;结束

隐式提交:事务执行中执行一条DDL语句,DDL语句中含有commit语句

隐式回滚:事务执行中执行exit;或者数据库非正常退出回滚。

四大特性

原子性

事务中的操作要么都执行,要么都不执行

一致性

在事务操作前和操作后保持数据的满足业务规范。比如A向B转钱过程前后,要保证A和B的总钱数相等。

隔离性

数据库允许多个并发事务同时对数据进行操作,规定事务的隔离级别,相当于多线程同步,可以设置事务的隔离级别。

永久性

事务提交以后,被改变的数据将永久的保存到数据库中。

事务的隔离级别

读未提交:(RU)一个事务能读到另一个事务正在处理的数据,造成脏读现象

读已提交:(RC)一个事务只能读到另一个事务提交了的修改完的数据,造成不可重复读和幻读现象

可重复读:(RR)一个事务能读到在另一个事务提交前的的数据,且读到的数据都是一致的。是mysql默认的隔离级别

串行:事务每读一行数据,就加表级共享锁,每写一行数据,都添加表级排它锁。严重影响innodb的并发性,有锁竞争


脏读

可以使用show  variables like '%ios%';来查看数据库的隔离级别

 可以使用set global|seesion transaction isolation level来设置全局或者当前会话的隔离级别

我们设置当前会话为读未提交;

下面两个会话发生脏读现象,都是RU隔离级别 

 

 

猜你喜欢

转载自blog.csdn.net/wangdongli_1993/article/details/81169989