黑马程序员技术交流社区

标题: 【石家庄校区】事务管理_概述_简单使用 [打印本页]

作者: 水煮牛蛙    时间: 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