MySQL事务

事务的定义

事务就是一组数据库操作序列(包含一个或者多个SQL操作命令),事务会把所有操作看作是一个不可分割的整体向数据库系统提交或撤销操作,所有操作要么都执行,要么都不执行。

ACID特性

原子性、一致性、隔离性、持久性

一、原子性:

事务管理的基础。把事务中的所有操作看作是一个补课分割的工作单元,要么都执行,要么都不执行。

二、一致性:

事务管理的目的。保证事务开始前和事务结束后数据的完整和一致。

三、隔离性:

事务管理的手段。使多个事务并发操作同一个表数据时,每个事务都有各自独立的数据空间,事务的执行不会受到其他事务的干扰。可通过设置隔离级别解决不同的一致性问题。

四、持久性:

事务管理的结果。当事务被提交以后,事务中的命令操作修改的结果会被持久保存,且不会被回滚

事务之间的相互影响分为几种,分别为

(1)脏读:一个事务读取了另一个事务未提交的数据,而这个数据是有可能回滚的。

(2)不可重复读:一个事务内两个相同的查询却返回了不同数据。这是由于查询时系统中其他事务修改的提交而引起的。

(3)幻读:一个事务对一个表中的数据进行了修改,这种修改涉及到表中的全部数据行。同时,另一个事务也修改这个表中的数据, 这种修改是向表中插入一行新数据。那么,操作前一个事务的用户会发现表中还有没有修改的数据行,就好象发生了幻觉一样。

(4)丢失更新:两个事务同时读取同一条记录,A先修改记录,B也修改记录(B不知道A修改过),B提交数据后B的修改结果覆盖了A的修改结果。

隔离级别:

未提交读(read uncommitted):允许脏读,不可重复读,幻读

提交读(read committed):不允许脏读,允许不可重复读,幻读

可重复读(repeatable read):不允许脏读,不可重复读,有条件的允许幻读(InnoDB存储引擎可以不允许)

串行读(serializable):都不允许,相当于表级锁定,但是会影响数据库的读写效率和性能

MySQL事务_第1张图片

mysql默认的事务处理级别是 repeatable read ,而Oracle和SQL Server是 read committed

设置隔离级别

#全局级别的设置,可在所有会话有效,需要重新登录才可生效

set global transaction isolation level 隔离级别 ;

#会话级别的设置,只对当前的会话有效

set session transaction isolation level 隔离级别;

事务隔离级别的作用范围分为两种:

全局级:对所有会话有效

会话级:只对当前的会话有效

查看隔离级别(会话和全局)

查询全局事务隔离级别

show global variables like '%isolaion';

查询会话事务隔离级别

show session variables like '%isolation%';

事务管理操作

事务管理中,原子性是基础,隔离性是手段,一致性是目的,持久性是结果

开启一个事务

begin;

事务性操作

……     

create

database/table

insert into

uodate

XXX set

delete from

在事务中创建回滚点

savepoint XX(XX代表回滚点名称)

在事务中回滚操作到指定回滚点位置

rollback to XX

提交或回滚结束事务

commit;或 rollback;

自动提交事务

set [global/session] autocommit = 0/1;                      #0关闭自动提交,1开启自动提交

show [global/session] variables like 'autocommit';         #查看Mysql中的autocommit值

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