MYSQL事务特点
事务定义:一个事务是由一条或者多条数据库操作的SQL语句组成的一个不可分割的单元,只有当事务的所有操作都正常执行完了,整个事务才会被提交给数据库,期间如果有部分事务处理失败,那么事务就要回退到最初的状态,因此,事务要么全部执行成功,要么全部失败。
事物的特征(ACID)
事务的原子性(Atomic)
事务是最小单元,不可再分,要么全部执行成功,要么全部失败回滚。
事务的一致性(Consistency)
- 一致性是指事务必须使数据库从一个一致的状态变到另外一个一致的状态,也就是执行事务之前和之后的状态都必须处于一致 的状态。
- 不一致性包含三点:脏读,不可重复读,幻读
事务的隔离性(Isolation)
隔离性是指当多个用户并发访问数据库时,比如操作同一张表时,数据库为每一个用户开启的事务,不能被其他事务的操作所 干扰,多个并发事务之间要相互隔离
事务的持久性(Durability)
DBMS(数据库管理系统)对数据的修改是永久性的。
事务的使用
- 事务查看:
SELECT @@AUTOCOMMIT
- 事务设置:
SET AUTOCOMMIT
可使用SET AUTOCOMMIT = 0操作;设置事务提交方式为手动提交事务
事务操作
- 开启事务:
BEGIN或 START TRANSACTION
- 事务提交:
commit
当组成事务的所有sql语句都执行成功,调用commit提交一个事务 - 事务回滚:
ROLLBACK
执行事务的过程中有一个事务失败,回滚一个事务到初始的位置 - 保存点操作:
SAVEPOINT point1
SAVEPOINT point1; 设置一个名字为point1的保存点
ROLLBACK TO point1; 事务回滚到保存点point1,而不是回滚 到初始状态 - 产看事务的隔离级别:
select @@tx_isolation
并发事务问题
在典型的应用程序中,多个事务并发运行,经常会操作相同的数据来完成各自的任务(多个用户对统一数据进行操作)。并发虽然是必须的,但可能会导致以下的问题:
脏读
A事务读取了B事务尚未提交的更改数据,并在这个读取的脏数据上进行操作。如果这时B事务恰巧进行了回滚事务,那么A事务读取的事务是不被承认的
如下取款事务和转账事务
就是说B事务还没进行提交操作A事务已经读取了修改之后的值,所以这样是不能被承认的。
不可重复读
不可重复读是指A事务读取了B事务已经提交的更改数据