事务
就是一组DML语句组成,这些语句在逻辑上存在相关性,这一组DML语句要么全部成功,要么全部失败,是一个整体。MySQL提供一种机制,保证我们达到这样的效果。事务还规定不同的客户端看到的数据是不相同的。(《数据库系统概念》)
是数据库中的一个单独的执行单元(Unit),由高级语言编写用户程序的执行所引起。当更改数据成功时,在事务中更改的数据就会被commit,不会再改变。否则,事务就会取消或者回滚,更改无效。(Java程序员面试宝典)
我的理解,其实数据库事务就是数据库进行读/写的操作序列。
作用:1.回滚事务 2.隔离操作
事务的特性
- 原子性:事务不可再分
- 一致性:执行前后,状态一致
- 隔离性:不被其他正在进行的事务看到修改过程
- 持久性:一旦提交,记录是永久的
4种隔离级别
-
Read unCommited 读未提交
-
Read Commited 读已提交
处理并发下,脏读的现象;
脏读:某一端看到了未被提交的事务,导致传达不正确。
A:1
B:1 (脏数据)
A:1->2 commit -
Repeatable Read 可重复读
处理并发下,不可重复读的现象;
不可重复读:是指在一个事务内,多次读同一数据。
A:1
B:1
A:1->2 commit
B:2 -
Serializable 可串行化
处理并发下,幻读的现象;
幻读:两端同时操作,导致数据混乱。
A:2 (幻读)
B:2->1
A:1 (幻读)