MySQL进阶(TCL 事务控制语言)
Posted ck_67
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MySQL进阶(TCL 事务控制语言)相关的知识,希望对你有一定的参考价值。
目录
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 事务控制语言)的主要内容,如果未能解决你的问题,请参考以下文章