一.MYSQL的事务
1.什么是事务???
事务(Transaction),就是将一组SQL语句放在同一批次内去执行,如果一个SQL语句出错,则该批次内 的所有SQL都将被取消执行。
2.事物的特点和限制
特点:
一个事务中如果有一个数据库操作失败,那么整个 事务的所有数据库操作都会失败,数据库数据就会 回滚到该事务开始之前的状态。
限制:
MySQL数据库中仅InnoDB和BDB类型的数据库表 支持事务。
3.事务的ACID原则
事务具有四个特征:原子性( Atomicity )、一致性( Consistency )、隔离性( Isolation )和持续性( Durability )。这四个特性简称为 ACID 特性。
原子性:
事务是数据库的逻辑工作单位,事务中包含的各操作要么都做,要么都不做
一致性:
事务执行的结果必须是使数据库从一个一致性状态变到另一个一致性状态。因此当数据库只包含成功事务提交的结果时,就说数据库处于一致性状态。如果数据库系统 运行中发生故障,有些事务尚未完成就被迫中断,这些未完成事务对数据库所做的修改有一部分已写入物理数据库,这时数据库就处于一种不正确的状态,或者说是 不一致的状态。
隔离性:
一个事务的执行不能其它事务干扰。即一个事务内部的操作及使用的数据对其它并发事务是隔离的,并发执行的各个事务之间不能互相干扰。
持续性:
也称永久性,指一个事务一旦提交,它对数据库中的数据的改变就应该是永久性的。接下来的其它操作或故障不应该对其执行结果有任何影响。
4.MySQL实现事务的方法
START TRANSACTION 开始一个事务,标记事务的起始点。
SET AUTOCOMMIT 使用该语句来改变自动提交模 式,等于0时关闭自动提交模式, 等于1时开启自动提交模式。默 认为1,使用事务时为0。
COMMIT 提交一个事务给数据库。
ROLLBACK 将事务回滚,数据回到本次事 务的初始状态。
5.MySQL实现事务的步骤
01 关闭MySQL自动提交
02 开启一个事务,标记事务的起始点
03-1 向数据库提交事务
03-2 将事务回滚,所有的数据库操作被取消
04 开启MySQL自动提交
二.脏读
某个事务已更新一份数据,另一个事务在此时读取了同一份数据,由于某些原因,前一个RollBack了操作,则后一个事务所读取的数据就会是不正确的。
三.不可重复读
在一个事务的两次查询之中数据不一致,这可能是两次查询过程中间插入了一个事务更新的原有的数据。
四.幻读
在一个事务的两次查询中数据笔数不一致,例如有一个事务查询了几列(Row)数据,而另一个事务却在此时插入了新的几列数据,先前的事务在接下来的查询中,就会发现有几列数据是它先前所没有的。