mysql-TCL事务与DML(insert/delete/update)


一、事务四个特性:ACID:

  • A:原子性:说明事务是最小的工作单元
  • C:一致性: 所有的事务要求,在同一个食物中,所有的奥做必须同时成功或者同时失败
  •  I:隔离性: A事务和B事务之间具有一定的隔离
  • D:持久性: 事务最终结束后一个保障; 事务提交,就相当于把没有保存到硬盘上的数据保存到硬盘上;

二、隔离级别:四个级别:

  • 1、读未提交:read uncommitted (最低级别): 事务A可以读取到事务B未提交的数据。  脏读现象:Dirty Read
  •  
  • 2、读已提交:read committed:  Oracle默认:read committed:
  • 事务A只能取到事务B提交之后的数据。解决了脏读现象,但不能重复读取数据    这种隔离级别是比较真实的数据,每一次读取到的数据库都是绝对真实的
  • 3、可重复读:repeatable read:mysql 中默认的事务隔离级别
  • 事务A开启之后,不论多久,每一次在事务A中读取到的数据都是一致的,即使事务B将数据已经修改提交了,但是事务A数据没有变化
  • 可能出现:幻影读取,不够真实;只要事务不结束,数据不会发生改变永远都是读取到的都是事务刚开启时的数据
  • 4、序列化、串行化:serializable(最高级别)
  • 这是最高隔离级别,效率最低,解决了所有问题。  这种隔离级别表示事务排队。不能并发;

三、事务TCL与DML(insert、delete、update)

  • 1、事务:一个事务就是一个完整的业务逻辑
  • 2、DML语句:才有事务,其他语句和事务无关:insert-- delete--update;这三个语句和事务有关,其他都没有关系;
  •  只要涉及到数据的:增、删、改;就一定要考虑安全问题,数据安全第一位!

四、事务:提交、回滚、

  • 问:事务是怎么做到多条DML语句同时成功和同时失败的:
  • 在InnoDB 存储引擎:提供一组用来记录事务活动的日志文件事务开启: insert-- delete-- update-- 事务结束
  • 在事务执行过程中,每一条DML的操作都会记录到“事务性活动的日志文件”中;在事务执行过程中,我们可以提交事务,也可以回滚事务
  • 提交事务:清空事务性活动的日志文件,将数据全部彻底持久化到数据库表中;标志着,事务的提交全部成功;
  • 回滚事务:将之前所有的DML操作全部撤销,并且清空事务性活动日志文件;标志着,事务全部失败;
  • 提交事务:commit;
  • 回滚事务:rollback;(回滚永远都是回滚到上一次的提交点)
  • 事务单词:transaction
  • mysql当中默认的事务行为是自动提交;关闭自动提交机制:start transaction