MySQL索引与存储引擎、事物

news2024/9/9 0:28:49

数据库索引

        是一个排序的列表,存储着索引值和这个值所对应的物理地址

        无须对整个表进行扫描,通过物理地址就可以找到所需数据

        是表中一列或者若干列值排序的方法

        需要额外的磁盘空间

        类型

                普通索引

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

                        创建普通索引的方式

                                直接创建

create index a1 on kgc.kc65(id);

                                修改表的方式创建

alter table kgc.kc65 add index a2 (id);

                                创建表时创建

create table kgc.kc1 (id int, name varchar(255),age int,index a1(id));

                唯一索引

                        与“普通索引”基本相同

                        与普通索引的区别就是索引列的所有值只能出现一次,即必须唯一

                        创建唯一索引的方式

create unique index a3 on kgc.kc65(id);
alter table kgc.kc65 add unique a4 (id);
create table kgc.kc2 (id int, name varchar(255),age int,unique a1(id));

                主键索引

                        是一种特殊的唯一索引,指定为“PRIMARYKEY”

                        一个表只能有一个主键,不允许有空值

                        创建主键索引的方式

CREATE TABLE `kc3` (
    `id` int(11) NOT NULL AUTO_INCREMENT ,
    `title` char(255) NOT NULL ,
    PRIMARY KEY (`id`)
);

                组合索引(单列索引与多列索引)

                        可以时单列上创建的索引,也可以时在多列上创建的索引

                        最左原则,从左往右依次执行

                        创建组合索引的方式

                全文索引

                        MySQL从3.23.23版开始支持全文索引和全文检索

        创建索引的原则依据

                创建索引的原则依据
                        表的主键、外键必须有索引
                        记录数超过300行的表应该有索引
                        经常与其他表进行连接的表,在连接字段上应该建立索引
                        唯一性太差的字段不适合建立索引
                        更新太频繁的字段不适合创建索引

                        经常出现在where子句中的字段,特别是大表的字段,应该建立索引

                        索引应该建在选择性高的字段上

                        索引应该建在小字段上,对于大的文本字段甚至超长字段,不要建索引

查看索引

show index from kc65;
show keys from kc65;


唯一性索引为0,主键索引为1


删除索引

alter table kgc.kc65 drop index a1;
drop index  a3 on kgc.kc65;

事务的概念 

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

        原子性:一个事务(transaction)中的所有操作,要么全部完成,要么全部不完成,不  会结束在中间某个环节

        持久性:事务处理结束后,对数据的修改就是永久的,即便系统故障也不会丢失

        隔离性:数据库允许多个并发事务同时对其数据进行读写和修改的能力,隔离性可以防止多个事务并发执行时由于交叉执行而导致数据的不一致

        事务控制的方法

                事务处理命令控制事务

                        begin:开始一个事务

                        commit:提交一个事务

                        rollback:回滚一个事务

                使用set命令进行控制

                        set autocommit=0;禁止自动提交

                        set autocommit=1;开启自动提交

存储引擎

        MySQL中的数据用各种不同的技术存储在文件中,每一种技术都使用不同的存储机制,索引技巧、锁定水平并最终提供不同的功能和能力、这些不同的技术以及配套的功能在MySQL中称为存储引擎

        MySQL数据库中的组件,负责执行实际的数据I/O操作

        myisam的介绍

                MyISAM不支持事务,不不支持外键

                访问速度快

                对事务完整性没有要求

                MyISAM在磁盘上存储成三个文件

                        .frm文件存储表定义

                        数据文件的扩展名为.MYD(MYData)

                        索引文件的扩展名是.MYI(MYIndex)

                表即锁定形式,数据在更新时锁定整个表

                数据库在读写过程中相互阻塞

                        会在数据写入的过程阻塞用户数据的读取

                        也会在数据读取的过程中阻塞用户的数据写入

                数据单独写入或读取,速度过程较快且占用资源相对少

                MyISAM支持的存储格式

                        静态表

                        动态表

                        压缩表

                MyISAM适用的生产场景举例

                公司业务不需要事务的支持

                单方面读取或写入数据比较多的业务

                MyISAM存储引擎数据读写都比较频繁场景不适合

                适用读写并发访问相对较低的业务

                数据修改相对较少的业务

        InnoDB

                支持4个事务隔离级别                  

                        1. 读未提交(READ UNCOMMITTED)

  •                         概述:在此级别下,事务可以读取到其他未提交事务中的数据。这可能导致“脏读”问题,即一个事务读取到了另一个尚未提交的事务所做的修改。
    •                 特点:并发性最高,但一致性最差。
      •         应用场景:一般不推荐在生产环境中使用,因为它无法保证数据的一致性。

                        2. 读已提交(READ COMMITTED)

  •                         概述:事务只能读取到其他已提交事务中的数据,避免了脏读的问题。但是,由于每次查询都会返回最新的已提交数据,因此在同一个事务中可能会出现“不可重复读”的问题。
    •                 特点:每次读取都会获取最新的一致性视图,避免了脏读,但可能出现不可重复读。
      •         应用场景:这是互联网最常用的隔离级别之一,适用于需要避免脏读但可以接受不可重复读的应用场景。

                        3. 可重复读(REPEATABLE READ)

  •                         概述:在可重复读级别下,事务在开始时读取的数据快照会被保存,并在事务结束时释放。这意味着在同一个事务中多次读取同一数据时,这些数据是一致的,避免了不可重复读的问题。但是,仍然可能出现“幻读”问题。
    •                 特点:通过多版本并发控制(MVCC)实现,确保了事务内数据的一致性。
      •         应用场景:这是InnoDB的默认隔离级别,适用于需要保证数据一致性和可重复读的应用场景。

                        4. 串行化(SERIALIZABLE)

  •                         概述:通过完全串行的方式处理事务,避免了脏读、不可重复读和幻读等所有并发问题。每个事务都会按照提交的顺序依次执行,不允许任何并发操作。
    •                 特点:一致性最好,但并发性最差。
      •         应用场景:适用于对一致性要求极高,且可以接受较低并发性的应用场景。

                行级锁定,但是全表扫描仍然会是表级锁定

                读写阻塞与事务隔离级别相关

                能非常高效的缓存索引和数据

                表与主键以组的方式存储

                支持分区、表空间,类似Oracle数据库

                支持外键约束,5.5前不支持全文索引,5.5后支持全文索引

                对硬件资源要求还是比较高的场合

               

grep default-storage-engine /etc/my.cnf
show create table t1\G;  //查看建表语句

                    修改方式

CREATE TABLE `t1` (
  `c1` int(10) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8

 

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

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

相关文章

图不连通怎么办?

目录 1.问题 2.连通的相关概念 3.解决方案 C语言示例实现: 1.问题 无论是图的深度还是广度遍历都是从图的某一条边往下走,那么被孤立的结点怎么被遍历到呢? 2.连通的相关概念 连通:如果从V到W存在一条(无向&#…

3D魔方游戏制作lua迷你世界

--3D魔方 --星空露珠工作室 --核心脚本来自负负 --1:xy 2:yx 3:xz 4:zx 5:yz 6:zy --4000,0-3 3995-0,3 local trn{ {{5,2},{3,1},{1,2},{1,3},{4,0},{2,2}}, {{3,0},{5,3},{1,3},{1,2},{2,3},{4,1}}, {{4,2},{2,1},{1,1},{1,0},{3,3},{5,1}}, {{2,0},{4,3},{1,0},{1,1},{5,0},…

Web3.js 4.x版本事件监听详解:从HTTP到WebSocket的迁移

项目场景 在一个使用以太坊区块链技术的项目中,需要监听智能合约的事件,以便在事件触发时能够及时响应。项目中使用了web3.js库的4.x版本,节点使用Geth启动,并通过HTTP与节点进行通信。 问题描述 合约DataStorage.sol文件已经定…

华为项目管理工具集

华为项目管理10大模板是一套被广泛认可和使用的项目管理工具集,它包含了在项目管理过程中常用的各种表格和文档模板。这些模板旨在帮助项目经理更有效地规划、执行和监控项目,确保项目的成功交付。 虽然具体的模板内容可能会有所不同,但根据…

51 单片机的Keil5软件

1. KEIL C51 软件获取 博主网盘下载:链接:https://pan.baidu.com/s/1YBfrRh2L7SIehS5xLQkAow?pwd4211 提取码:4211 也可以在 KEIL 的官网上下载:http:// https://www.keil.com/download/product/ 打开界面如下图所示&#xff1…

机器学习(二十三):决策树和决策树学习过程

一、决策树 下面是数据集,输入特征是耳朵形状、脸形状、是否有胡子,输出结果是是否为猫 下图是决策树,根据耳朵形状、脸形状、是否有胡子这几个特征,建立决策树,从根节点一步步预测结果。 上图中,每一个椭…

[硬件]—电感传感器

电感传感器 1.概述 工作基础:电磁感应,即利用线圈自感或互感的改变来实现非电量测量。工作原理: 被测物理量(非电量:位移、振动、流量);线圈自感系数L/互感系数M;电压或电流&#…

QT常用的控件(二)

QT的常用控件 一.按钮类控件1.1 Push Button代码示例: 带有图标的按钮代码示例: 带有快捷键的按钮代码示例: 按钮的重复触发 1.2 Radio Button代码示例: 选择性别代码示例: click, press, release, toggled 的区别代码示例: 单选框分组 1.3 Check Box代码示例: 获取复选按钮的取…

邮件攻击案例系列四:某金融企业遭遇撒网式钓鱼邮件攻击

案例描述 2023 年 3 月末,某知名投资公司业务经理李先生先后收到两封看似是来自邮件服务商和公司网络安全部门发出的邮件,标题是“紧急:邮箱安全备案更新通知”。邮件内容称,由于最近公司内部系统升级,所有员工必须重…

【微信小程序实战教程】之微信小程序的配置文件详解

小程序的配置文件 对于有过服务端开发的程序员来说,肯定对“约定优于配置”并不陌生,这是一种按约定编程的软件设计范式,目的在于减少软件开发者做决定的数量。而微信小程序正好与这种软件设计范式的理念相反,小程序是一种“配置…

java将map转json字符串或者再将json字符串转回map,java将对象转json字符串或者互想转换,对象集合和json字符串互转

1.导入hutool工具依赖 <dependency><groupId>cn.hutool</groupId><artifactId>hutool-all</artifactId><version>5.8.16</version></dependency>2.直接复制一下代码运行 import cn.hutool.json.JSONUtil;import java.util.Ar…

【C语言报错已解决】Format String Vulnerability

&#x1f3ac; 鸽芷咕&#xff1a;个人主页 &#x1f525; 个人专栏: 《C干货基地》《粉丝福利》 ⛺️生活的理想&#xff0c;就是为了理想的生活! 引言 在日常开发中&#xff0c;我们经常会遇到各种各样的bug&#xff0c;其中格式化字符串漏洞报错可能是最让人头疼的一种。这…

谷歌(google)又出新功能了,快来学

谷歌开发客户这个算是每个外贸业务必备的几个基础技能之一了&#xff0c;大家对谷歌这块的用法多少都有些了解。最近谷歌更新了一个功能&#xff0c;类似于商机推荐的功能&#xff0c;我带大家来了解一下。 我们搜索公司之后&#xff0c;他会展示其他用户搜索过的一些信息。大家…

高职院校大数据人才培养成果导向系统构建、实施要点与评量方法

一、引言 在当今信息化快速发展的背景下&#xff0c;大数据已成为推动社会进步和产业升级的重要力量。为满足社会对大数据人才的需求&#xff0c;高职院校纷纷开设大数据相关专业&#xff0c;并致力于探索科学有效的人才培养模式。本文立足于我国信息化与智能化发展趋势&#…

彻底解决WPS右键没有新建文件的问题

1、综合解决 这个教程能解决大部分的问题彻底解决WPS右键没有新建文件的问题 2、作者补充 作者的教程没有那么麻烦

【java】 力扣 最后一个单词的长度

目录 题目链接题目描述代码 题目链接 58.最后一个单词的长度 题目描述 代码 public int lengthOfLastWord(String s) {int n s.length();int count 0;if(s null ||s.length() 0){return 0;}for(int i n-1;i>0;i--){if(s.charAt(i) ){if(count 0) continue;break;}count…

在pytroch中使用CIFAR10完成完整的模型训练套路

模型训练套路&#xff1a; 1.准备数据集2.加载数据集3.搭建神经网络4创建损失函数5.优化器6.设置训练网络的一些参数7.添加tensorboard&#xff08;方便观察&#xff09;8.开始训练.测试9.保存神经网络 准备数据 #准备数据集 dataset_traintorchvision.datasets.CIFAR10("…

外星人入侵_外星人

项目_外星人入侵_外星人 1创建第一个外星人1.1创建Alien类1.2创建Alien实例1.3让外星人出现在屏幕上 2创建一群外星人2.1确定一行可以容纳多少外星人2.2 创建多行外星人2.3创建外星人群2.4重构create_fleet()2.5添加行 3让外星人群移动3.1向右移动外星人3.2创建表示外星人移动方…

迷你世界魔方模型快速制作

做六个不一样颜色的顶部 --黄&#xff0c;绿&#xff0c;红&#xff0c;蓝&#xff0c;橙&#xff0c;白 --local ids{4000,3999, 3998,3997,3996,3995} 游戏脚本运行上一期文章 local x0,y0,z0-39,7,10--起点坐标 --框架、底面、侧面1-4、顶面 local id{682,671,681,680,66…

消息队列rabbitmq的使用

前提条件&#xff1a;环境安装amqp和安装rabbitmq sudo apt-get update sudo apt-get install rabbitmq-amqp-dev 1、创建CMakeLists.txt文件 # Copyright (c) Huawei Technologies Co., Ltd. 2019. All rights reserved.# CMake lowest version requirement cmake_minimum_…