黑马程序员技术交流社区
标题:
【石家庄校区】事务管理_概述_简单使用
[打印本页]
作者:
水煮牛蛙
时间:
2018-5-9 15:30
标题:
【石家庄校区】事务管理_概述_简单使用
本帖最后由 小石姐姐 于 2018-5-11 10:15 编辑
事务管理_概述_简单使用
1.事务
指的是逻辑上的一组操作,组成这组操作的各个逻辑单元,要么全都成功,要么全都失败。
2.事务的相关命令
* 开启事务:
start transaction;
* 提交事务
commit;
* 回滚事务
rollback;
* 查看事务隔离级别
SELECT @@tx_isolation;
* 设置事务隔离级别
**脏读,重复读,虚读/幻读都有可能发生(最低级别)
**避免脏读
SET SESSION TRANSACTION ISOLATION LEVEL read committed;
**避免脏读和不可重复
SET SESSION TRANSACTION ISOLATION LEVEL repeatable read;
**避免脏读,不可重复读,虚读/幻读(最高级别)
SET SESSION TRANSACTION ISOLATION LEVEL serializable;
3.事务的特性:
* 原子性:事务的不可分割,组成事务的各个逻辑单元不可分割。
* 一致性:事务执行的前后,数据完整性保持一致。
* 隔离性:事务执行不应该受到其他事务的干扰。
* 持久性:事务一旦结束,数据就持久化到数据库中。
4.隔离性
* 一个事务的执行,不应该受到其他事务的干扰。
5.事务的安全问题
* 在不考虑事务的隔离性时,引发一些安全问题,主要体现在读取数据上:
** 脏读:一个事务读到了另一个事务未提交的数据,导致查询结果不一致
** 不可重复读:一个事务读到了另一个事务已经提交的update的数据,导致多次查询结果不一致。
** 虚读/幻读:一个事务读到了另一个事务已经提交的insert的数据,导致多次查询结果不一致。
6.解决事务安全性问题的办法
* 设置事务的隔离级别
** read uncommitted : 脏读,不可重复读,虚度都有可能发生;
** read committed : 避免脏读.但是不可重复读和虚度会发生; //oracle 默认的
** repeatable read : 避免脏读和不可重复,但虚读有可能发生; //mysql默认的
** serializable : 避免脏读,不可重复读,虚读;
* oracle 默认的级别为 read committed
* mysql 默认的级别为 repetable read
#注意:
*实际开发中大多使用 read committed / repeatable read 两种级别
*原因:最高级别虽然安全性高,但效率比较低
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2