Mysql数据库索引、事务相关知识

索引

  • 索引是一种特殊的文件,包含着对数据表里所有记录的引用指针。可以对表中的一列或多列创建索引,

    并指定索引的类型,各类索引有各自的数据结构实现

  • 查看索引

show index from 表名;

在这里插入图片描述

  • 创建索引
  • 对于非主键、非唯一约束、非外键的字段,可以创建普通索引
create index 索引名 on 表名(字段名);
  • 删除索引

drop index 索引名 on 表名;

drop index 索引名 on 表名;

删除索引,表创建过后创建索引的危险操作的解决办法

  • 原因:
    1. 数据库锁删除一个索引时,数据库通常会获取一个排他锁来执行删除操作,意味着在删除索引期间,其他对该表的操作可能会被阻塞,直到删除操作完成。
    2. 数据可用性:在删除和重新创建索引的过程中,可能会有一段时间内无法访问该表
    3. 存储空间:索引需要额外的存储空间。对于大型表或者包含大量索引的表,这可能会占用大量磁盘空间
  • 解决方法:
    1. 用新机器搭建一个数据库
    2. 把生产环境的数据库表创建好,加上索引
    3. 把生产环境的数据库的数据导入新的数据库中
    4. 用新的数据库这个机器代替原来的

事务

  • 事务指逻辑上的一组操作,组成这组操作的各个单元,要么全部成功,要么全部失败

  • 事务是确保数据操作的一致性和完整性的重要机制

  • 底层数据结构:B+树

  • 数据库事务机制

    1. undo log + redo log
    2. 通过日志,println写到文件理,记录之前的数据进行操作
    3. 虽然数据库挂了,但是日志已经记录下来了
    4. 数据库重启过后,读取之前的日志,对一半的事务进行回滚
  • 事务特性

    1. 原子性:事务被视为不可分割的最小工作单元,通过事务,把多个操作打包到一起
    2. 一致性:事务的执行不会破坏数据库的完整性约束,同时通过约束避免非法的情况。不会让数据库出现问题的时候出现一些错误的情况,
    3. 持久性:事务的任何修改都是持久存在的
    4. 隔离性:避免事务并发执行的时候可能出现的问题
  • 典型事务bug

  • 脏读问题

    1. 事务1修改了某个数据,但是事务还没有提交
    2. 事务2读取了同一个数据,此时事务2读到的数据可能就是一个脏的数据,因为事务1可能之后还要修改这个数据
    3. 两个事务同时进行

    解决:给写操作加锁,直到事务1修改完成过后事务2才能进行访问

  • 不可重复读

    1. 事务1先修改数据,然后加锁,事务2读数据的时候需要等待
    2. 事务1修改提交过后,事务2进行读数据
    3. 此时又来一个事务3,因为读的时候并没有进行加锁,事务3对事务2读的数据进行了修改,导致两次读取到的数据结果不一样
  • 解决:读进行加锁,读数据的时候不能进行修改

  • 幻读

    1. 事务1修改数据,事务2开始读数据
    2. 事务3新增了一个其他的数据,此时事务2就可能出现两次读取到的结果集不同
  • 解决:串行化,不在进行并发操作,每个事务都是串行执行的(执行第一个在执行第二个。。。)

  • Mysql隔离级别

    1. read uncommitted:读未提交,并行程度最高,隔离程度最低,效率最高,数据最不靠谱
    2. read commited :读已提交,给写操作加锁,并行程度降低,隔离程度
    3. repeatable read:可重复读,给读写操作都加锁
    4. serializable :串行化,所有的事务都是串行执行
  • 事务使用

    1. 开启事务:start transaction;
    2. 执行多条SQL语句
    3. 回滚或提交:rollback/commit;(rollback即是全部失败,commit即是全部成功)
start transaction;
-- 阿里巴巴账户减少2000
update accout set money=money-2000 where name = '阿里巴巴';
-- 四十大盗账户增加2000
update accout set money=money+2000 where name = '四十大盗';
commit;

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

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

相关文章

基于贝叶斯优化的卷积神经网络-循环神经网络混合模型的的模拟股票时间序列预测(MATLAB R2021B)

将机器学习和深度学习方法运用到股市分析中, 不仅具有一定的理论价值, 也具有一定的实践价值。从理论价值上讲, 中国的量化投资技术(投资观念、方法与决策等)还不够成熟, 尚处在起步阶段, 能够将量化投资技术运用到投资决策中的公司寥寥无几。目前, 国内…

Spring框架:核心概念与Spring Boot微服务开发指南

引言 Spring框架是一个开源的Java平台,它提供了全面的基础设施支持,用于开发Java应用程序。Spring的核心概念包括依赖注入(DI)、面向切面编程(AOP)和事务管理。随着微服务架构的兴起,Spring Boot作为Spring框架的扩展,提供了一种快速开发独立微服务的方式。本文将详细介…

端口被占用,使用小黑框查杀

netstat -ano (查看目前所有被占的端口) netstat -ano|findstr " 8080" 查一下目前被占用的端口号 ,目前我要查的端口号是:8080,注意 后面打8080的时候,要有空格,要不然报错 **task…

Zabbix 的部署和自定义监控内容

前言 一个完整的项目的业务架构包括 客户端 -> 防火墙 -> 负载均衡层(四层、七层 LVS/HAProxy/nginx) -> Web缓存/应用层(nginx、tomcat) -> 业务逻辑层(php/java动态应用服务) -> 数据缓存/持久层(r…

C 预处理器

C 预处理器 概述 C预处理器是C语言编译过程中的一个重要环节,它对源代码进行预处理,以扩展和修改代码内容。预处理器的主要功能包括宏定义、文件包含、条件编译等。本文将详细介绍C预处理器的工作原理、功能及其在C编程中的应用。 C预处理器的工作原理…

C# List、LinkedList、Dictionary性能对比

数据结构性能对比 List、LinkedList、Dictionary 1. ArrayList (List:前传) ArrayList 是一个特殊数组, 通过添加和删除元素就可以动态改变数组的长度。 ArrayList集合相对于数组的优点: 支持…

C 语言总复习

总体上必须清楚的: 1)程序结构是三种: 顺序结构 , 循环结构 (三个循环结构), 选择结构 (if 和 switch) 2)读程序都要从main()入口, 然后从最上面顺序往下读(碰到循环做循环,碰到选择做选择)。 3)计算机的数据在电脑中保存是以二进制的形式. 数据存放的位置就是他的地址。 4…

适合selenium的防自动化检测的方法

Selenium 是一个强大的自动化测试工具,能够模拟真实用户与网页的交互。针对您询问的适合在 Selenium 中实施的策略,以下是一些直接适用于或可以通过 Selenium 配置实现的方法: 修改User-Agent: 通过 Chrome 或 Firefox 的选项在启动时设置自…

操作系统智能助手OS Copilot评测报告

背景 如果不是朋友告知,我还不知道阿里云推出了【操作系统智能助手OS Copilot】这样一款产品。 我做系统运维的工作还是挺多的,知道系统运维工作的一些痛点;例如: Linux命令繁杂,想全部记住不太可能,多数…

软件测试《用例篇》

测试用例 测试用例的概念 测试用例是被测试人员向被测试系统发起的一组集合,包括测试环境,操作步骤,预期结果,测试数据等 使用测试用例的好处 使用测试用例进行测试的好处主要有:提高测试效率,降低测试的重…

YOLOV8改进DSConv分布移位卷积

基础干货:高效卷积,降内存提速度保精度 (eepw.com.cn) 各种卷积性能对比(Conv,DwConv,GhostConv,PConv,DCNV)-CSDN博客

WAWA鱼曲折的大学四年回忆录

声明:本文内容纯属个人主观臆断,如与事实不符,请参考事实 前言: 早想写一下大学四年的总结了,但总是感觉无从下手,不知道从哪里开始写,通过这篇文章主要想做一个记录,并从现在的认…

中国智能制造装备产业发展机遇

导语 大家好,我是社长,老K。专注分享智能制造和智能仓储物流等内容。 新书《智能物流系统构成与技术实践》 更多的海量【智能制造】相关资料,请到智能制造online知识星球自行下载。 随着全球第四次工业革命的浪潮,智能制造装备产业…

刷leetcode中常用且有效的方法总结

刷题的时候经常会因为不知道一个方法多写很多行代码,既然有trick为何不用!你问我眼中为何常含泪水,因为我忘记方法忘的深沉。那么我决定出一期!刷题中常用且有效的方法们!将会陆续补充,有补充欢迎评论区留言 目录 py…

C++ 函数高级——函数的默认参数

函数默认参数 在C中,函数的形参列表中的形参是可以有默认值的 语法:返回值类型 函数名 (参数 默认值){ } 示例: 正确代码: 运行结果:

昇思25天学习打卡营第13天|sea_fish

打开第13天。本次学习的内容为LLM原理和实践中基于MindSpore通过GPT实现情感分类的内容。记录学习的过程。 根据实验系统中的内容一步一步学习基于MindSpore通过GPT实现情感分类的整个过程。整个过程分为以下三个过程: 数据集加载与处理:数据集加载和数…

开源六轴协作机械臂myCobot 280接入GPT4大模型!实现更复杂和智能化的任务

本文已经或者同济子豪兄作者授权对文章进行编辑和转载 引言 随着人工智能和机器人技术的快速发展,机械臂在工业、医疗和服务业等领域的应用越来越广泛。通过结合大模型和多模态AI,机械臂能够实现更加复杂和智能化的任务,提升了人机协作的效率…

Laravel批量插入数据:提升数据库操作效率的秘诀

Laravel批量插入数据:提升数据库操作效率的秘诀 Laravel作为PHP的现代Web应用框架,提供了优雅而简洁的方法来处理数据库操作。批量插入数据是数据库操作中常见的需求,尤其是在处理大量数据时,批量插入可以显著提高性能。本文将详…

LDAP技术解析:打造安全、高效的企业数据架构

1.LDAP简介 LDAP(Lightweight Directory Access Portocol,轻量目录访问协议)是一种用于访问与管理分布式目录服务的开放协议。目录服务是一种特殊的数据库,优化用于读取和查询操作,而不是写入操作。LDAP广泛用于身份验…

盘点当下智能体应用开发的几种形态

现在多智能体系统开发的关注度越来越高了,不光在开发者的圈子热度很高,很多职场人士,甚至是小白也参与其中,因为现在的门槛越来越低了,尤其是,最近特别火的扣子(coze)和百度的appbui…