手动提交事务

事务的操作

MySQL操作事务的语句

手动开启事务

start transaction

手动提交事务

commit

手动回滚事务

rollback

查询事务的自动提交情况

show variables like ‘%commit%’;

设置事务的手动提交方式

set autocommit = 0 关闭自动提交, 1 开启自动提交

  1. 开启事务 -> 执行SQL语句 -> 成功 -> 提交事务
  2. 开启事务 -> 执行SQL语句 -> 失败 -> 回滚事务

注意:
只要提交事务,那么数据就会长久保存了,就不能再回滚事务了
提交事务,回滚事务都是代表结束当前事务的操作

事务的四大特性(ACID)

事务特性

含义

一致性(Consistency)

事务前后数据的完整性必须保持一致

原子性(Atomicity)

事务是一个不可分割的工作单位,事务中的操作要么都发生,要么都不发生。

隔离性(Isolation)

是指多个用户并发访问数据库时,一个用户的事务不能被其它用户的事务所干扰,多个并发事务之间数据要相互隔离,不能相互影响。

持久性(Durability)

指一个事务一旦被提交,它对数据库中数据的改变就是永久性的,接下来即使数据库发生故障也不应该对其有任何影响

事务并发访问引发的三个问题

并发访问的问题

含义

脏读

一个事务读取到了另一个事务中未提交的数据。最严重,一定避免

不可重复读

一个事务中两次读取的数据内容不一致,这是事务update时引发的问题

幻读(虚读)

一个事务内读取到了别的事务插入或者删除的数据,导致前后读取记录行数不同。这是insert或delete时引发的问题

事务的隔离级别

级别

名字

隔离级别

脏读

不可重复读

幻读

数据库默认隔离级别

1

读未提交

read uncommitted




2

读已提交

read committed




Oracle和SQL Server

3

可重复读

repeatable read




MySQL

4

串行化

serializable




安全性:serializable > repeatable read > read committed > read uncommitted

性能 : serializable < repeatable read < read committed < read uncommitted

设置全局事务隔离级别:

set global transaction isolation level 隔离级别;