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