事务、函数和索引

目录

什么是事务?

事务的ACID原则:

事务的操作

事务的原子性、一致性、持久性

事务的隔离性

什么是事务的隔离性?

用什么方法实现事务的隔离性?

MySQL中的锁

锁分类:

事务的隔离级别

事务并发问题

InnoDB的MVCC

MVCC的基本原理

MVCC的优点

MVCC的缺点

慢查询

Mysql对慢查询的操作

常见的函数分类

索引

索引的分类

全文索引注意:

优化原则——创建索引

优化原则-SQL编写

优化原则——索引失效

MySQL选择使⽤B+树⽽不是红⿊树作为其索引数据结构,主要是出于以下⼏个原因:

索引的物理分类

聚簇索引:

优点:

缺点:

⼆级索引(辅助索引、⾮聚簇索引) :


什么是事务?

事务(Transaction),就是将一组SQL语句放在同一批次执行,如果一个SQL语句出错,则该批次内的所有SQL都将被取消执行

特点:一个事务中如果有一个数据库操作失败,那么整个事务的所有数据库操作都会失败,数据库数据就会回滚到该事务开始之前的状态。

限制:MySQL数据库中仅InnoDB和BDB类型的数据库表支持事务

事务的ACID原则:

原子性:意味着数据库中的事务执行是作为原子粒度。即不可再分,整个语句要么执行,要么不执行

一致性:即在事务开始之前和事务结束以后,数据库的完整性约束没有被破坏

隔离性:事务的执行是互不干扰的,一个事务不可能看到其他事务运行时,中间某一时刻的数据。

持久性:意味着在事务完成以后,该事务所对数据库所作的更改便持久的保存在数据库之中,并不会被回滚。

事务的操作

 1.关闭自动提交

set autocommit=0;

 2.开始事务

start transaction;

 3.一组sql语句

update bank set bmoney = bmoney-1000 where bname='周永康';

update bank set bmoney = bmoney+1000 where bname='杨文琦';

 4.结束事务(判断)

-- 提交  提交一个事务给数据库。

commit;

-- 回滚  将事务回滚,数据回到本次事务的初始状态。

rollback;

 5.开启自动提交

set autocommit=1;

事务的原子性、一致性、持久性

事务的原子性、一致性和持久性由事务的 redo 日志和undo 日志来保证。

REDO LOG 称为 重做日志 ,提供再写入操作,恢复提交事务修改的页操作,用来保证事务的持久性。

UNDO LOG 称为 回滚日志 ,回滚行记录到某个特定版本,用来保证事务的原子性、一致性。

事务的隔离性

什么是事务的隔离性?

为了让不同的事务之间相互不存在干扰,就需要对事务的操作进行隔离,

事务的隔离性也就是将操作同一个数据的事务相互分离,让操作之间分开有序的执行

用什么方法实现事务的隔离性?

通常用数据库里都是采用锁的机制,保证事物之间的隔离性

MySQL中的锁

锁分类:

基于锁的属性分类:共享锁(读锁、S锁)、排他锁(写锁,X锁)。

基于锁的粒度分类:表锁、行锁(记录锁、间隙锁、临键锁)。

基于锁的状态分类:意向共享锁、意向排它锁。

乐观锁和悲观锁

事务的隔离级别

事务并发问题

在事务并发执行的时候,如果不进行事务隔离,那么就会产生脏写、脏读、重复读、幻读的问题

事务的隔离级别

READ_UNCOMMITTED

读未提交

事务读取:不加锁

事务写入:加写锁

解决问题:脏写

存在问题:脏读,不可重复度,幻读

READ_COMMITTED  

读提交(不可重复读)

事务读取:加读锁(每次select完成后会释放读锁)

事务写入:加写锁

解决问题:脏写、脏读

存在问题:不可重复度,幻读

REPEATABLE_READ   

可重复读

事务读取:加读锁(每次select完成后不会释放锁,而是事务结束后才释放)(如果是mysql的innodb还会加间隙锁)

事务写入:加写锁

解决问题:脏写、脏读,不可重复度,幻读(如果是mysql的innodb则已解决)

存在问题:幻读(如果是mysql的innodb则不存在)

SERIALIZABLE   

串行化

不管读取还是修改所有的事务串行化执行,一个事务的执行必须等其他事务结束。

InnoDB的MVCC

MVCC Multiversion Concurrency Control),多版本并发控制。顾名思义,MVCC 是通过数据行的多个版本管理来实现数据库的并发控制 。这项技术使得在InnoDB的事务隔离级别下执行 一致性读操作有了保 证。换言之,就是为了查询一些正在被另一个事务更新的行,并且可以看到它们被更新之前的值,这样 在做查询的时候就不用等待另一个事务释放锁。

MVCC 的实现依赖于:隐藏字段、Undo LogRead View

InnoDB就是通过MVCC机制解决可重复读中的幻读问题。

MVCC的基本原理
1. 版本号:每个数据⾏都有⼀个隐藏的版本号,⽤于标识该⾏数据的版本。当⼀⾏数据被更新
时,其版本号也会被更新。
2. 读取操作:读取操作会读取符合其事务开始时版本号的数据版本,⽽不是最新的数据版本。这
样可以保证事务在读取过程中看到的数据是⼀致的。
3. 写⼊操作:写⼊操作会创建⼀个新的数据版本,并更新该⾏数据的版本号。旧的数据版本仍然
保留,直到垃圾回收器清理掉不再需要的版本。

MVCC的优点
3 1. 提⾼并发性能:MVCC通过减少锁的使⽤,提⾼了系统的并发性能。
2. 减少锁争⽤:由于每个事务看到的是⾃⼰快照中的数据版本,减少了锁争⽤的情况。
3. 简化事务管理:MVCC使得事务的管理和隔离更加简单和⾼效。
MVCC的缺点
1. 额外的存储开销:维护多个数据版本会占⽤更多的存储空间。
2. 垃圾回收开销:需要定期清理不再需要的数据版本,否则会导致存储空间浪费。

慢查询

Mysql默认10秒内没有响应SQL结果,则为慢查询

Mysql对慢查询的操作

//显示到mysql数据库的连接数

show status like 'connections';

-- 查看慢查询的状态

Show variables like '%slow_query%';

-- 设置慢查询的到表 mysql.slow_log

set global log_output='TABLE';

-- 设置慢查询的时间

set global long_query_time=3;

-- 开启慢查询

set global slow_query_log='ON';

-- 慢查询的次数

show status like 'slow_queries';

-- 慢查询记录

select * From mysql.slow_log ;

-- 慢查询sql语句

select convert(sql_text using utf8) sql_text from mysql.slow_log

-- 关闭慢查询

set global slow_query_log='OFF';

常见的函数分类

数学函数,聚合函数,字符串函数,日期函数和自定义函数

索引

索引是对数据库表中一列或多列的值进行排序的一种结构,使用索引可快速访问数据库表中的特定信息

特性:高效性,唯一性,完整性,特殊能力(使用优化隐藏器,提高系统性能)

索引的分类

主键索引在数据库关系图中为表定义一个主键将自动创建主键索引。

唯一索引不允许具有索引值相同的行,从而禁止重复的索引或键值。

常规索引最基本的索引类型,没有 唯一性之类的限制。

全文索引搜索引擎的关键技术,用于检索文本信息, 可以是词语或者段落。

全文索引注意:

1.Mysql 5.6之前版本,只有myisam支持全文索引,5.6之后,Innodb和myisam均支持全文索引。

2.只有char、varchar、text类型字段能创建全文索引。

3.当大量写入数据时,建议先写入数据,后再建立全文索引,提高效率。

4.Mysql内置ngram 解析器,可以解析中日韩三国文字。有汉字的一定要启用它。

5.英文分词用空格,逗号;中文分词用 ngram_token_size 设定.

注意需要在配置文件中加入:[mysqld]

ngram_token_size=2

优化原则——创建索引

优化原则-SQL编写

优化原则——索引失效

MySQL选择使⽤B+树⽽不是红⿊树作为其索引数据结构,主要是出于以下⼏个原因:

1. 磁盘访问效率:数据库系统通常需要处理⼤量的数据,这些数据往往存储在磁盘上。磁盘访问
的代价远⾼于内存访问,因此优化磁盘访问效率⾄关重要。B+树的设计特别适合磁盘存储,
其节点可以容纳更多的键值对,减少了磁盘I/O次数。
2. 数据组织:B+树将所有数据记录存储在叶⼦节点上,⽽⾮叶⼦节点只包含键值和指向其他节
点的指针。这种结构使得范围查询和顺序访问更加⾼效,因为数据记录在叶⼦节点上连续存
储,便于磁盘的顺序读取。
3. ⾼度平衡:B+树的⾼度通常较低,因为每个节点可以包含更多的⼦节点。这意味着从根节点
到叶⼦节点的距离较短,查询效率更⾼。红⿊树虽然也是平衡树,但在插⼊和删除操作中可能
需要进⾏较多的结构调整,以保持平衡。
4. 空间利⽤率:B+树的空间利⽤率更⾼。由于⾮叶⼦节点不存储数据记录,节点的空间可以被
更充分地利⽤,减少了空间浪费。
5. 并发控制:在数据库系统中,并发访问和锁机制是⾮常重要的。B+树的结构使得它可以更好
地⽀持并发操作,尤其是在进⾏范围查询时,可以更容易地实现锁的粒度控制。
        综上所述,B+树在磁盘存储、数据组织、查询效率、空间利⽤率和并发控制等⽅⾯都更适合⽤于数据库索引,因此MySQL选择了B+树作为其索引数据结构。

索引的物理分类

索引按照物理实现⽅式,索引可以分为 2 种:聚簇(聚集)和⾮聚簇(⾮聚集)索引。我们也把⾮聚集
索引称为⼆级索引或者辅助索引。
聚簇索引:
特点:
1. 使⽤记录主键值的⼤⼩进⾏记录和⻚的排序,这包括三个⽅⾯的含义:
⻚内 的记录是按照主键的⼤⼩顺序排成⼀个 单向链表 。
各个存放 ⽤户记录的⻚ 也是根据⻚中⽤户记录的主键⼤⼩顺序排成⼀个 双向链表 。
存放 ⽬录项记录的⻚ 分为不同的层次,在同⼀层次中的⻚也是根据⻚中⽬录项记录的主键
⼤⼩顺序排成⼀个 双向链表 。
2. B+树的 叶⼦节点 存储的是完整的⽤户记录。
所谓完整的⽤户记录,就是指这个记录中存储了所有列的值(包括隐藏列)。
优点:
数据访问更快 ,因为聚簇索引将索引和数据保存在同⼀个B+树中,因此从聚簇索引中获取数据⽐⾮ 聚簇索引更快
聚簇索引对于主键的 排序查找 和 范围查找 速度⾮常快
按照聚簇索引排列顺序,查询显示⼀定范围数据的时候,由于数据都是紧密相连,数据库不⽤从多
个数据块中提取数据,所以 节省了⼤量的io操作 。
缺点:
插⼊速度严重依赖于插⼊顺序 ,按照主键的顺序插⼊是最快的⽅式,否则将会出现⻚分裂,严重
影 响性能。因此,对于InnoDB表,我们⼀般都会定义⼀个⾃增的ID列为主键
更新主键的代价很⾼ ,因为将会导致被更新的⾏移动。因此,对于InnoDB表,我们⼀般定义主键
为 不可更新
⼆级索引访问需要两次索引查找 ,第⼀次找到主键值,第⼆次根据主键值找到⾏数据
⼆级索引(辅助索引、⾮聚簇索引) :
概念:回表 以某列⼤⼩排序的B+树只能确定我们要查找记录的主键值,所以如果我们想根 某列的值查
找到完整的⽤户记录的话,仍然需要到 聚簇索引 中再查⼀遍,这个过程称为 回表 。也就 是根据某列的
值查询⼀条完整的⽤户记录需要使⽤到 2 棵B+树!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/51050.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【C++】红黑树的应用(封装map和set)

✨ 青山一道同云雨,明月何曾是两乡 🌏 📃个人主页:island1314 🔥个人专栏:C学习 🚀 欢迎关注:👍点赞 &…

Unity UGUI 实战学习笔记(3)

仅作学习,不做任何商业用途 不是源码,不是源码! 是我通过"照虎画猫"写的,可能有些小修改 不提供素材,所以应该不算是盗版资源,侵权删 拼UI 提示面板的逻辑 using System.Collections; using System.Col…

大数据——Hive原理

摘要 Apache Hive 是一个基于 Hadoop 分布式文件系统 (HDFS) 的数据仓库软件项目,专为存储和处理大规模数据集而设计。它提供类似 SQL 的查询语言 HiveQL,使用户能够轻松编写复杂的查询和分析任务,而无需深入了解 Hadoop 的底层实现。 Hive…

Firefox扩展程序和Java程序通信

实现Firefox扩展程序,和Java RMI Client端进行通信。 在Firefox工具栏注册按钮,点击按钮后弹出Popup.html页面,引用Popup.js脚本,通过脚本向Java RMI client发送消息,Java RMI Client接收消息后转发到Java RMI Server…

MyBatis的入门操作--打印日志和增删改查(单表静态)

下面介绍注解和xml实现crud的操作 目录 一、日志打印和参数传递 1.1.使用mybatis打印日志 1.2.参数传递细节 二、crud(注解实现) 2.1.增(insert) 2.2.删(delete) 和 (update) 2.3.查(select) 三、crud(xml实现) 3.1.准备…

中国居民膳食指南书籍知识点汇总

人如果吃不好,就不能好好思考,好好爱,好好休息。——维吉尼亚伍儿夫 文章目录 书籍简介饮食准则推荐膳食图示 准则一:食物多样,合理搭配合理搭配的方法平衡膳食的科学原理均衡饮食的作用食物功效(有科学实验…

02、爬虫数据解析-Re解析

数据解析的目的是不拿到页面的全部内容,只拿到部分我们想要的内容内容。 Re解析就是正则解析,效率高准确性高。学习本节内容前需要学会基础的正则表达式。 一、正则匹配规则 1、常用元字符 . 匹配除换行符以外的字符 \w 匹配字母或数字或下划…

基于Python的房产数据分析系统的设计与实现(源码+lw+部署文档+讲解等)

文章目录: 目录 详细视频演示 设计文档详细参考 技术开发的参考技术栈! 2.1 Python语言 2.2 Django框架 2.3 MySQL 2.4 Hadoop介绍 2.5 Scrapy介绍 4.2 系统结构设计 4.3 数据库设计 界面设计与功能实现 5.1系统登录注册实现 5.2管理员模块…

【请求代理】springboot单机服务基于过滤器Filter实现第三方服务器接口请求代理功能

springboot单机服务基于过滤器Filter实现第三方服务器接口请求代理功能 一、前言二、解决思路三、基于gateway实现四、基于过滤器Filter实现五、问题总结 **注:本文源码获取或者更多资料,关注公众号:技术闲人**一、前言 在项目开发时会遇到w…

基于yolov8的口罩检测模型

项目介绍 本项目基于yolov8对图像进行训练,可以检测戴口罩的人与没有带口罩的人的图片和视频,除此之外,还提供了数据分析界面,支持检测过的信息转化为excel,信息可视化等功能 配置过程 软件开发环境:python3.9 系统…

前端开发:HTML与CSS

文章目录 前言1.1、CS架构和BS架构1.2、网页构成 HTML1.web开发1.1、最简单的web应用程序1.2、HTTP协议1.2.1 、简介1.2.2、 http协议特性1.3.3、http请求协议与响应协议 2.HTML概述3.HTML标准结构4.标签的语法5.基本标签6.超链接标签6.1、超链接基本使用6.2、锚点 7.img标签8.…

Apollo:实时通信架构CyberRT入门, my writer

1. 简介 1.1 从 ROS 系统说起 Apollo 最初用的中间件是 ROS(机器人操作系统),在 v3.0 之前用的都是基于 ROS 框架进行开发。概括来说,ROS 系统主要包含三方面: 第一是通信系统,ROS 是个分布式的松耦合系统,算法模块是以独立的进程形式存在的,也就是我们常说的 Node。R…

单击和一些案例

一、单击 1、单击概念 除了定位鼠标之外,processing鼠标还捕捉鼠标是否被单击。mousePressed在鼠标单击和不单击的情况下有不同的值。mousePressed变量是一种bool变量,也就是说它只有两个可能的值,真和假。当鼠标按下的时候mousePressed的值…

apache2和httpd web服务器

apache2和httpd web服务器 apache2和httpd web服务器是啥apache是软件基金会apache2是一个web服务httpd和apache2是同一个东西,但是不同linux发行版中叫法不一样。就是同一个东西,但是看上去有一些不一样。 apache2和httpd web服务器是啥 apache是软件基…

Scikit-learn内置的数据集

数据集是我们学习和研究机器学习不可或缺的基础,Scikit-learn库内置了丰富的数据集资源,非常适合初学者用来练习和验证机器学习算法的效果。 一、鸢尾花数据集 鸢尾花数据集(Iris Dataset)是机器学习领域中最著名的数据集之一&am…

【每日一篇】使用图神经网络进行交通速度预测的上下文感知知识图谱框架【为了自己方便读论文】

Context-aware knowledge graph framework for traffic speed forecasting using graph neural network 论文链接: https://arxiv.org/abs/2407.17703 翻译: 摘要 人类流动在空间和时间上受到城市环境的密切影响,构成了理解交通系统的重…

MarkTool之UDP

UDP客户端,主要作用是与UDP服务端连接进行数据通讯 1、连接参数有4个,绑定IP和Port,服务端IP和Port 2、接收数据和发送数据的参数设置,有16进制,有字符,有原始数据,都可进行选择 3、定时发送&a…

理解常见开源协议的区别

本文将介绍几种常见的开源许可证,包括GPL、LGPL、MIT、Apache、BSD 和 木兰协议(Mulan PSL),并详细解释它们的区别。 1. GPL (GNU General Public License) GPL 是最著名和最常用的开源许可证之一,由自由软件基金会 …

泰安网站建设有几大特点

泰安网站建设的特点可以分为以下几个方面: 一、突出地域特色。泰安是山东省的一个地级市,具有悠久的历史和深厚的文化底蕴。在网站建设过程中,泰安的特色文化和旅游资源应得到充分的展示。可以通过优美的图片、详细的介绍和生动的文字&#x…

【Python 基础】字典和结构化数据 -1

字典和结构化数据 在本文中,我将介绍字典数据类型,它提供了一种灵活的访问和组织数据的方式。然后,结合字典与关于列表的知识,你将学习如何创建一个数据结构,对井字棋盘建模。 字典数据类型 像列表一样,“字典”是许多值的集合。但不像列表的下标,字典的索引可以使用…