前言
小伙伴们早上好,下午好,晚上好呀,今天继续给大家分享最后一个语言TCL啦,没看过前面两个的先看前面两个哦,更容易理解呢。
MySQL之DQL——查询语言_秋雨绵绵-CSDN博客_dql
目录
一、TCL的定义:
TCL(Data Control Language):事务由单独单元的一个或多个SQL语句组成,在这
个单元中,每个MySQL语句是相互依赖的。
而整个单独单元作为一个不可分割的整体,如果单元中某条SQL语句一旦执行失败或产生错误,整个单元将会回滚。所有受到影响的数据将返回到事物开始以前的状态;如果单元中的所有SQL语句均执行成功,则事物被顺利执行。
二、MySQL中的存储引擎
含义:在mysql中的数据用各种不同的技术存储在文件(或内存)中。
如何查看你自己的MySQL版本的引擎呢?
通过show engines;来查看mysql支持的存储引擎
在mysql中用的最多的存储引擎有:innodb,myisam ,memory 等。其中innodb支持事务,而myisam、memory等不支持事务
面试题:myisam与innoDB的区别?
三、事物的相关操作
3.1事物的ACID属性
1. 原子性(Atomicity)
原子性是指事务是一个不可分割的工作单位,事务中的操作要么都发生,要么都不发生。
2. 一致性(Consistency)
事务必须使数据库从一个一致性状态变换到另外一个一致性状态。
3. 隔离性(Isolation)
事务的隔离性是指一个事务的执行不能被其他事务干扰,即一个事务内部的操作及使用的数据对并发的其他事务是隔离的,并发执行的各个事务之间不能互相干扰
4. 持久性(Durability)
持久性是指一个事务一旦被提交,它对数据库中数据的改变就是永久性的,接下来的其他操作和数据库故障不应该对其有任何影响
3.2、事物的使用步骤
1、开启事务
2、编写事务的一组逻辑操作单元(多条sql语句)
3、提交事务或回滚事务
3.3、 事物的分类
隐式事物
没有明显的开启和结束事务的标志
insert、update、delete语句本身就是一个事务
显式事务
1. 取消自动提交事务:set autocommit=0;
2. 开启事务:start transaction;
3. 提交或回滚事务:
- commit;
- rollback;
3.4、事物的隔离级别
为什么我们要了解事物的隔离级别?
首先就应该了解事物的并发问题是如何产生的?
当多个事务同时操作同一个数据库的相同数据时就会产生事物的并发问题,就比如我在使用我的游戏账户,进行游戏,另一个人也能进入我的同一个游戏账户进行游戏的话,那么这个是不是会存在问题呢?数据究竟是谁的呢?
其次,事物的并发问题有以下几种
- 脏读:一个事务读取到了另外一个事务未提交的数据
- 不可重复读:同一个事务中,多次读取到的数据不一致
- 幻读:一个事务读取数据时,另外一个事务进行更新,导致第一个事务读取到了没有更新的数据
那么什么是数据库的隔离级别呢?
定义:一个事务与其他事务隔离的程度称为隔离级别. 数据库规定了多种事务隔离级别, 不同隔离级别对应不同的干扰程度, 隔离级别越高, 数据一致性就越好, 但并发性越弱
数据库事物的隔离性:数据库系统必须具有隔离并发运行各个事务的能力, 使它们不会相互影响, 避免各种并发问题。
四种隔离级别
注意:隔离级别从小到大安全性越来越高,但是效率越来越低
数据库对于隔离级别的支持程度:
Oracle 支持的 2 种事务隔离级别:READ COMMITED, SERIALIZABLE。
Oracle 默认的事务隔离级别为: READ COMMITED
Mysql 支持 4 种事务隔离级别. Mysql 默认的事务隔离级别为: REPEATABLE READ
3.5、如何在MySQL中设置隔离级别
每启动一个 mysql 程序, 就会获得一个单独的数据库连接. 每个数据库连接都有一个全局变量 @@tx_isolation, 表示当前的事务隔离级别.
查看当前的隔离级别: SELECT @@tx_isolation;
设置当前 mySQL 连接的隔离级别
set session transaction isolation level read committed
设置数据库系统的全局的隔离级别
set global transaction isolation level read committed;
写在最后
MySQL基础内容就跟大家分享到这里,感谢大家的阅读,文中如有不足之处,欢迎各位评论区友好交流,互相学习哦