概述
数据库事务(transaction)是访问并可能操作各种数据项的一个数据库操作序列,是一个不可分裂的工作单位。事务是由事务开始于事务结束之间执行的全部数据库操作组成。
在MySQL中只有使用 Innodb 数据库引擎的数据库或者表才支持事务。
事务处理可以用来维护数据库完整性,保证成批的SQL语句要么全部执行,要么全部不执行。
事务用来管理insert,update,delete语句。
事务特性
一般来说,事务必须满足4个条件(ACID):原子性(Atomicity,或称为不可分割性),一致性(Consistency),隔离性(Isolation,又称独立性),持久性(Durabillity)。
原子性:一个事务(transaction)中所有操作,要么全部执行,要么全部不完成,不会结束在中间某个环节。事务在执行过程中发生错误,会被回滚(Rollback)到事务开始前的状态,就像这个事务从来没有执行过一样。
持久性:事务处理结束后,对数据修改就是永久的,即便系统故障也不会丢失。
隔离性:数据库允许多个并发事务同时对其数据进行读写和修改的能力,隔离性可以防止多个事务并发执行时由于交叉执行而导致数据的不一致。事务隔离分为不同的四个级别,包括读未提交,读提交,可重复读和串行化。
一致性:在事务开始之前和事务结束以后,数据库的完整性没有被破坏。这表示写入的数据必须完全符合所有的预设规则。比如不能出现转100,只收到50的情况。前面提到的原子性,持久性和隔离性,都是为了保证数据库状态的完整性。
事务设置
默认情况下,MySQL启用自动提交模式(变量autocommit为ON)。这意味着,只要你执行DML操作的语句,MySQL会立即隐式提交事务。
由于变量autocommit分会话系统变量与全局系统变量,所以查询的时候,最好的区别是会话系统变量还是全局系统变量。
MySQL事务处理主要有两种办法:
1.用BEGIN,ROLLBACK,COMMIT来实现
BEGIN;/START TRANSACTION;开始一个事务
ROLLBACK 事务回滚
COMMIT 事务提交
2.直接用SET来改变MySQL的自动提交模式:
SET GLOBAL autocommit=0;禁止自动提交
SET GLOBAL autocommit=1;开启自动提交
查看 autocommit模式
SHOW GLOBAL VARIABLIES LIKE”autocommit“;