MySQL进阶(TCL 事务控制语言)

Posted ck_67

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MySQL进阶(TCL 事务控制语言)相关的知识,希望对你有一定的参考价值。

目录

1、事务的概念

2、数据库引擎

3. 事务的ACID特征

4. 事务操作步骤

5. 事务分类  

6. 事务的隔离级别(面试常考)  

7、事务的三大范式

8、savepoint的使用


1、事务的概念

如果一个包含多个步骤的业务操作,被事务管理,那么这些操作要么同时成功,要么同时失败。

2、数据库引擎


    * 概念:在mysql中的数据用各种不同的技术存储在文件(或内存)中
    * 操作:
        show engines: 查看mysql支持的存储引擎

面试题:MyISAM 与 InnoDB 区别?

3. 事务的ACID特征


    * 原子性(Atomicity):是不可分割的最小操作单位,要么同时成功,要么同时失败
    * 一致性(Consistency):保证数据的状态操作前和操作后保持一致
    * 隔离性(Isolation):多个事务同时操作相同数据库的同一个数据时,一个事务的执行不受另外一个事务的干扰。
    * 持久性(Durability):当事务提交或回滚后,数据库会持久化的保存数据



4. 事务操作步骤


    1. 开启事务
    2. 编写事务逻辑操作单元
    3. 提交事务或回滚事务

步骤1:开启事务
set autocommit=0;
start transaction;#可选的
步骤2:编写事务中的SQL语句(select insert update delete这几个才可以编写事务,比如drop等就不行)
语句1;
语句2;
.....
步骤3:结束事务
commit;提交事务
rollback;回滚事务
savepoint 节点名;设置保存点


5. 事务分类
  

 * 隐式事务:没有明显的开启和结束事务的标志
        * insert、update、delete语句本身就是一个事务
    * 显式事务:具有明显的开启和结束事务的标志
        1. 取消自动提交事务:set autocommit=0;
        2. 开启事务:start transaction;
        3. 提交或回滚事务:
            - commit;
            - rollback;


6. 事务的隔离级别(面试常考)
  

  * 事务并发问题是如何产生的?
        - 当多个事务同时操作同一个数据库的相同数据时
    * 事务并发问题
        - 脏读:一个事务读取到了另外一个事务未提交的数据
        - 不可重复读:同一个事务中,多次读取到的数据不一致
        - 幻读:一个事务读取数据时,另外一个事务进行更新,导致第一个事务读取到了没有更新的数据
    * 处理事务并发问题,设置事务隔离级别
        - READ UNCOMMITTED
        - READ COMMITTED:可以避免脏读
        - REPEATABLE READ:可以避免脏读、不可重复读和一部分幻读
        - SERIALIZABLE:可以避免脏读、不可重复读和幻读
    * 注意:隔离级别从小到大安全性越来越高,但是效率越来越低
    * 设置隔离级别
        - set session|global  transaction isolation level 隔离级别名;
    * 查看隔离级别
        - select @@tx_isolation;

 

7、事务的三大范式

第一范式(1NF)要求数据库表的每一列都是不可分割的原子数据项。
第二范式(2NF)前提:满足第一范式。第二范式需要确保数据库表中的每一列都和主键相关,而不能只与主键的某一部分相关(主要针对联合主键而言)。即每张表只描述一件事。
第三范式(3NF)前提:满足第一、二范式。确保数据表中的每一列数据都和主键直接相关,而不能间接相关。

8、savepoint的使用

SELECT * FROM account;

SET autocommit=0;
START TRANSACTION;
DELETE FROM `account` WHERE id=1;
SAVEPOINT a;#设置保存结点
DELETE FROM `account` WHERE id=2;
ROLLBACK TO a;#回滚到保存点

以上是关于MySQL进阶(TCL 事务控制语言)的主要内容,如果未能解决你的问题,请参考以下文章

mysql----事务控制语言--TCL

MySQL(事务控制语言TCL)

MySQL 数据查询语言(DQL)& 事务控制语言(TCL)详解

MySQL5.TCL语言

MySQl之TCL(数据事务语言)

TCL_事务控制语言