mysql只有使用Innodb数据库引擎的数据库或表才支持事务
一、事务必须满足的条件:
1、原子性(Atomicity 或称不可分割性): 一个事务(transaction)中的所有操作,要么全部完成,要么全部不完成,不会结束在中间某个环节。事务在执行过程中发生错误,会被回滚(Rollback)到事务开始前的状态,就像这个事务从来没有执行过一样。
2、一致性(Consistency): 在事务开始之前和事务结束以后,数据库的完整性没有被破坏。
3、隔离性(Isolation , 又称独立性):数据库允许多个并发事务同时对其数据进行读写和修改的能力,隔离性可以防止多个事务并发执行时由于交叉执行而导致数据的不一致。事务隔离分为不同级别,包括读未提交(Read uncommitted)、读提交(read committed)、可重复读(repeatable read)和串行化(Serializable)。
4、持久性 (Durabillity):事务处理结束后,对数据的修改就是永久的,即便系统故障也不会丢失。
二、事务控制语句:
1、begin或 start transaction显示地开启一个事务
2、commit也可以使用commit work,两者等价,commit会提交事务,并使已对数据库的所有修改成为永久性的
3、rollback 也可以使用rollback workm,两者等价,回滚会结束用户的事务,并撤销正在进行所有未提交的事务
4、savepoint identifier ,允许在事务中创建一个节点,一个事务可以有多个节点savepoint
5、release savepoint idnetifier 删除一个事务的保存点,当没有指定保存点时,执行语句会抛出一个异常
6、rollabck savepoint idnetifier 把事务回滚到标记点
7、set transaction 用来设置一个事务的隔离级别。 InnoDB存储引擎提供事务的隔离级别有read un committed (未提交)、read commited(读提交)、repeatable read(可重复读)、serializable(串行化)
三、mysql事务处理的方法
1、使用begin 、rollback 、commit 来实现
- begin 开启一个事务
- rollback事务回滚
- commit 事务确认
2、直接使用set改变mysql是自动提交模式
- set autocommit=0 禁止自动提交
- set autocommit=1 开启自动提交
事务测试:
结论:可以看到回滚事务后插入的数据撤销了。