MySQL 索引事务

MySQL 索引&事务

文章目录

  • MySQL 索引&事务
    • 1. 索引
      • 1.1 概念
      • 1.2 作用
      • 1.3 使用场景
      • 1.4 使用
    • 2. 事务
      • 2.1 为什么使用事务
      • 2.2 事务概念
      • 2.3 事务的特性
      • 2.4 使用

1. 索引

1.1 概念

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

1.2 作用

  • 索引所起的作用类似书籍目录,可用于快速定位、检索数据

  • 索引对于提高数据库的性能有很大的帮助

    在这里插入图片描述

1.3 使用场景

要对数据库表的某列或某几列创建索引,需要考虑以下几点:

  • 数据量较大,且需要经常对数据进行条件查询
  • 对列的修改操作频率低(插入,删除,修改)

满足以上条件时,可以考虑对表中的这些字段创建索引,以提高查询效率

反之,如果对非条件查询列、经常做插入、修改操作、磁盘空间不足的情况,不考虑创建索引

1.4 使用

我们在创建主键约束(PRIMARY KEY)唯一约束(UNIQUE)0外键约束(FOREIGN KEY)时,会自动创建对应列的索引

  • 查看索引

    show index from 表名
    

    案例:查看班级表已有的索引

    --创建主键时会产生索引--此时索引名为PRIMARY
    create table classes (idx_classex int primary key auto_increment, name varchar(20)); 
    show index from classes;
    

    在这里插入图片描述

  • 创建索引

    对于非主键、非唯一约束、而非外键的字段,可以创建普通索引

    create index 索引名 on 表名(字段名)
    

    案例:创建班级表中,name字段的索引

    create index idx_classse on classes;
    

    在这里插入图片描述

  • 删除索引

    drop index 索引名 on 表名;
    

    案例:删除班级表中name字段的索引

    drop index idx_classes_name on classes;
    

    在这里插入图片描述

注:索引并不是一种直接调用的方法,而是一种提高查询效率的方式

在创建索引前,数据查询是按顺序遍历查询的,一旦数据量过大,则查询效率会很低:

在这里插入图片描述

为此我们可以创建一个索引,再次调用查询后会先自动搜索对应索引来查找数据,以此提高我们的查询效率:

在这里插入图片描述

2. 事务

2.1 为什么使用事务

我们先准备一个测试表:

create table account (id int primary key auto_increment;name varchar(20),money decimal(11, 2)
);insert into account(name, money) values ('阿里巴巴', 5000), ('四十大盗', 1000);

在这里插入图片描述

这时,四十大盗从阿里巴巴的账户上偷盗了2000元

-- 阿里巴巴账户减少2000
update account set money = money - 2000 where name = '阿里巴巴';
-- 四十大盗账户增加2000
update account set money = money + 2000 where name = '四十大盗';

假如在执行以上第一句SQL时,出现网络错误,或者是数据库挂掉了,阿里巴巴的账户会减少2000元,但是四十大盗的账户上就没有了增加的金额

解决方案:使用事务来控制,保证以上两句SQL语句要么全部执行成功,要么全部执行失败

2.2 事务概念

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

在不同的环境下,都可以有事务,对应在数据库中,就是数据库事务

2.3 事务的特性

  • 原子性:指事务是一个不可分割的最小工作单位,事务中的操作只有都发生和都不发生两种情况
  • 一致性:事务必须要使数据库从一个一致状态变换为另一个一致状态,且中间变换的过程其它事务不可见。如:阿里巴巴被四十大盗偷了1000元,其事务就是阿里巴巴账户上少了1000元,四十大盗上多了1000元。因为一致性的影响其它事务看到的情况要么是阿里巴巴还没少1000元的情况,要么就是四十大盗成功偷到阿里1000元的情况,至于中间阿里少了1000元而四十大盗还没加上1000元这个中间状态是不可见的
  • 隔离性:一个事务的执行不能被其它事务干扰,即一个事务内部的操作及使用的数据对并发的其它事务是隔离的,并发执行的各个事务之间不能互相干扰
  • 持久性:一个事务一旦提交成功,它对数据库中数据的改变将是永久性的

2.4 使用

  1. 开启事务:start transaction;
  2. 执行多条SQL语句
  3. 回滚或提交:rollback/commit;(rollback一般配合条件判断语句使用)

rollback代表从start transaction到rollback位置下语句全部执行失败,commit代表从start transaction到commit下语句全部执行成功

start transaction;
-- 阿里巴巴账户减少2000
update account set money = money - 2000 where name = '阿里巴巴';
-- 四十大盗账户增加2000
update account set money = money + 2000 where name = '四十大盗';
commit;

在这里插入图片描述

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

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

相关文章

学好Python-新手小白如何做?

新手小白如何学好Python?有哪些参考方法吗?这是一个老生常谈的话题了。今天为大家带来两位前辈的分享,他们给出了非常实用的方法和思路,希望对你有所帮助。 1、多练,两个字:多练 如果真的要说方法可以参考如下: ①…

排查线程阻塞问题

案例代码 package first;import java.util.concurrent.TimeUnit;public class DeadLock {private static volatile Object lock new Object();public static void main(String[] args) {new Thread(() -> {test1();}).start();new Thread(() -> {test2();}).start();}p…

Spring 推断构造方法

文章目录 内容总结实例化 内容总结 实例化 Spring 自行创建 Bean 的规则如下 默认使用无参构造方法, 只有一个有参时用有参, 有多个有参时报错多个有参, 且其中一个上有 Autowired 注解: 用有 Autowired 注解的那个, 且 Spring 自动注入参数值. 注意 Primary/Order/Ordered …

[量化投资-学习笔记015]Python+TDengine从零开始搭建量化分析平台-量化知识点汇总

之前的章节介绍了多个技术分析指标,以下进行一个简单的总结。 看过之前章节的同学就可以不用打开了。 技术指标 MAEMAMACDCCIATRKDJ MA 最基础的技术指标,对一段周期内的收盘价进行简单平均,是一切指标的基础。 def calc_ma(period,ma):ma_…

JAVA中Integer的拆箱与装箱

Integer 字符串与数值 的转换 String str"1000";int i1000;//int --> String//方式一 String s1i"";//int类型加上一个空字符串 返回就是字符串System.out.println(s1);//方式二String s2String.valueOf(i); //调用String的方法valueOf, 将int类型变…

centos下安装mysql8版本

1、如果服务器没有wget,先下载wget工具 sudo yum install wget 2、下载指定mysql版本的tar包 sudo wget https://downloads.mysql.com/archives/get/p/23/file/mysql-8.0.21-1.el7.x86_64.rpm-bundle.tar 3、解压tar包 sudo tar -xvf mysql-8.0.21-1.el7.x86_64.rpm…

《QT从基础到进阶·二十四》按钮组QButtonGroup,单选框QRadioButton和多选框QCheckBox

1、按钮组QButtonGroup 如果有多个单选按钮,可以统一放进一个按钮组。 图中有三个单选按钮放进了一个QGroupBox,并且设置了水平布局,现在要将这三个单选按钮放进一个按钮组,之前的想法是先把三个按钮加入按钮组,再把按钮组放进QG…

cesium api放大缩小地图

方法缩小地图封装api <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>Cesium Zoom API</title&…

MATLAB中uiresume函数用法

目录 语法 说明 示例 按下按钮后恢复执行 使用函数调用恢复执行 uiresume函数的功能是恢复暂停程序的执行。 语法 uiresume uiresume(f) 说明 uiresume 恢复与当前图窗 (gcf) 关联的对应 uiwait 调用暂停的程序执行。 uiresume(f) 恢复与图窗 f 关联的对应 uiwait 调用…

开发企业微信群机器人,实现定时提醒

大家好&#xff0c;我是鱼皮&#xff0c;今天分享一个用程序解决生活工作问题的真实案例。 说来惭愧&#xff0c;事情是这样的&#xff0c;在我们公司&#xff0c;每天都要轮流安排一名员工&#xff08;当然也包括我&#xff09;去楼层中间一个很牛的饮水机那里接水。但由于大…

MySQL安装配置与使用教程(2023.11.13 MySQL8.0.35)

CONTENTS 1. MySQL的安装与配置2. MySQL常用操作教程 1. MySQL的安装与配置 MySQL Windows Installer 下载地址&#xff1a;MySQL Installer。 我们下载最新版本&#xff08;目前是8.0.35&#xff09;的安装包&#xff0c;注意要选择更大的那个&#xff0c;名字为 mysql-inst…

【杂谈】体验AI帮助编写代码,有提升效率,AI本身提升空间也很大

体验AI帮助编写代码 ​专栏内容&#xff1a; 手写数据库toadb 本专栏主要介绍如何从零开发&#xff0c;开发的步骤&#xff0c;以及开发过程中的涉及的原理&#xff0c;遇到的问题等&#xff0c;让大家能跟上并且可以一起开发&#xff0c;让每个需要的人成为参与者。 本专栏会定…

租用服务器带宽类型应用

服务器带宽类型多样&#xff0c;以满足不同行业的需求。本文将介绍香港常见的服务器带宽类型及其应用领域。 1. 共享带宽 共享带宽是指多个用户共同使用同一台服务器的带宽资源。这种带宽类型适用于小型企业或个人网站&#xff0c;因为其成本较低。由于多个用户共享带宽资源&…

Java的XWPFTemplate word生成列表

Java的XWPFTemplate工具类导出word.docx的使用_xwpftemplate 语法_youmdt的博客-CSDN博客 如果是表格的列表参考上面这篇文章即可&#xff0c;比较复杂的列表遍历暂时还没找到方法&#xff0c;只能手动创建表格了 上面是模板&#xff0c;非常简单&#xff0c;以为我们是要自己创…

HTTP 常见的请求头

面试官&#xff1a;说说 HTTP 常见的请求头有哪些? 作用&#xff1f; 一、是什么 HTTP头字段&#xff08;HTTP header fields&#xff09;,是指在超文本传输协议&#xff08;HTTP&#xff09;的请求和响应消息中的消息头部分 它们定义了一个超文本传输协议事务中的操作参数 …

2023年最新的前端面试收集(2)

webpack熟悉吗&#xff1f;webpack打包流程是什么&#xff1f; webpack打包流程 解析配置文件&#xff1a; 读取并解析配置文件&#xff0c;并根据配置生成一个Compiler对象。读取入口文件&#xff1a;根据配置中的入口文件&#xff0c;读取这些文件及其依赖的模块&#xff0…

Linux下快速上手Screen

一、Screen简介 GNU Screen是一款由GNU计划开发的用于命令行终端切换的自由软件。在Linux终端中管理会话时&#xff0c;Screen是一个非常有用的工具。它允许在单个终端会话中创建多个虚拟终端&#xff0c;从而可以同时运行多个任务&#xff0c;即使在断开与服务器的连接后也可…

阿里云服务器搭建sql 服务

阿里云搭建mysql服务 环境准备 系统镜像 ubuntu 如果买点的实例不是ubuntu 系统镜像&#xff0c;需要停止服务之后&#xff0c;更改镜像 更新 apt-get &#xff1a; 更新apt-get: sudo apt-get update 如果没有出现&#xff1a;apt-get 找不到此命令的错误&#xff0c;可能是…

Angular 指令介绍及使用(三)

Angular 指令概述 在 Angular 中&#xff0c;指令是一种机制&#xff0c;用于扩展和修改组件的行为和外观。指令可以由开发者自定义&#xff0c;也可以是 Angular 框架自带的一些内置指令。通过使用指令&#xff0c;我们可以在 HTML 模板中通过属性或元素名来操作组件。 Angu…

LeetCode-2656. K 个元素的最大和-朴素+贪心和数学公式

Problem: 2656. K 个元素的最大和 每日一题。 文章目录 思路Code朴素贪心等差求和公式 思路 从小到大排序&#xff0c;一直对最后那个值&#xff08;下标&#xff09;进行1操作。 联系等差数列(d1)&#xff0c;前n项求和。n(a1an)/2或n*a1n(n-1)d/2 Code 朴素 class Solution…