mysql的索引事务和存储引擎

一、索引

1、索引

索引的概念 :索引是一个排序的列表,在列表当中存储索引的值以及索引值对应数据所在的物理行。

索引的引用:

使用索引之后,就不需要扫描全表来定位某行的数据。

加快数据库的查询速度。

索引可以是表中的一列,也可以是多个列。

索引优点:

1、设置了索引之后,数据库可以利用索引快速定位,大大提高查询速度,这也是索引的主要原因。

2、尤其是表的数据很大,以及设计多个表查询时,索引可以大大的提高查询速度。

3、建立索引,不仅能够提高查询速度,在恢复数据库的数据时,也能提高性能。

4、可以加快表与表之间连接查询的速度。

索引缺点:

1、创建的索引也需要占用额外的磁盘空间,INNODB存储引擎表数据文件和索引文件在一块,一体的,相对来说占是空间小一点。

2、更新一个包含索引的表比没有索引的表需要花费更多的时间,表需要更新,索引也要更新,所以速度要慢很多。

理想的做法:经常被作为搜索条件的列上面创建索引。

2、创建索引的原则和依据

1、表的主键和外键必须有索引,主键是唯一的,外键是关联主表的,查询时可以快速定位。

2、一张表有超过300行的数据,应该要创建索引。

3、经常与其他表进行连接的表,在连接字段上创建索引。

4、更新太频繁的字段不适合创建索引,

5、经常作为where语句的条件列,应该创建索引,

6、经常使用group by 和 order by的字段上要创立索引。

7、选择一个性能高的字段作为索引,字段的值不同的越多越好。

8、索引应该建立在小字段上,字符串的长度比较小的字段,对于长文本字段,超长的字段不适合建立索引。

3、索引的类型

b-tree (b-树索引)索引:绝大部分的数据都是使用B-树索引。

索引的左边的列开始,到右按顺序进行排列。

哈希索引:索引对应的hash值的方法获取表的记录行。速度比较慢,赢的方法少。

4、创建索引

1、主键索引:主键即索引

主键索引是一种特殊的唯一索引。

2、普通索引

在创建表的时候创建普通索引

create table member (
id int(10),
name varchar(10),
cardid int(18),
phone int(11),
address varchar(50),
remark text,
index name_index (name) #创建普通索引
);

3、唯一索引(unique index )

创建之后修改,可以用key 的方式创建 也可以使用索引方式创建

格式

create unique index 索引名 on 表名();
ALTER TABLE member add unique index phone_index (phone);
#或者
CREATE UNIQUE index cardid_index on member(cardid);

4、组合索引

组合索引:一次性给多个列创建索引,形成一个组合。

适应于被经常搜索的列

alter table member add constraint 索引名 unique (字段1,字段1,字段1);
例如
ALTER TABLE member add CONSTRAINT uc_name_address UNIQUE (name,address);

查看索引,组合索引共用一个索引名称

使用组合索引

select * from member where name= ... and address......;

5、 查看索引

show index from 表名;

6、删除索引

 删除索引要先查看,根据索引名(Key_name)进行删除

drop index 索引名称 on 表名;
或者
alter TABLE 表名 drop index 索引名称;

7、 全文索引

 全文索引:适用于模糊查询,检索大文本使用的

create fulltext index remark_index on member (remark);

数据内容

使用索引

select * from member where match(remark) against ('vip')

在创建的时候添加多个索引

create table sysvip(
id int(5) PRIMARY KEY,#主键索引
name varchar(10),
cardid int(11),
address varchar(50),
times timestamp,
remark text,
index name_index (name),#普通索引
unique index cardid_index (cardid), #唯一索引
FULLTEXT index remark_index (remark)#全文索引
);

查看

 

二、 mysql的事务

1、事务

事务是一个机制,一个操作序列。一组或者一条数据库的操作命令。

把所有的命令作为一个整体向系统提交或者撤销的操作。要么都成功要么都失败。

数据的一致性,数据的一致性非常重要

事务是一个不可分割的工作逻辑单元,在数据库上执行并发操作时,事务是最小的控制单元

数据库通过事务的控制和事务的整体性保证数据的一致性。

2、事务的特点

ACID在数据库的管理系统中,事务的特性有ACID这四种:

A:ATIMICITY 原子性:事务的最小控制单位,不可分割,要么都成功,要么都失败

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

开始的时候数据是一致的,结束的时候数据也是一致的

在事务进行的时候,数据可以处于不一致的状态,但是一旦结束,数据必须回到一致性。

I:ISOLATION 隔离性:在并发环境中,不同的事务同时操作相同的数据时,每个事务都有自己完整的数据空间。对数据的修改所发生的并发事务是隔离的,每个事务之间都是独立的。

一个用户的事务不被其他事务所干扰。

3、数据库的隔离性

有以下四种:

1、未提交读 read uncommitted RU

允许脏读,一个事务可以看到其他事务未提交的修改

2、提交读,read committed RC

一个事务只能看到其他事务已经提交的修改,未提交的修改不可见,防止脏读

oracle和sql sever

3、可重复读,repeatable read RR 一个事务在执行中,执行两次相同的select语句,得到的结果都想同的mysql的默认隔离选项。防止脏读和不可重复读。

4、串行读,相当于锁表,完全串行化的读,一个事务在使用,其他事务的读写都会阻塞。

脏读:

查看当前会话的隔离级别

show global/session variables like '%isolation%'

修改隔离级别

set global transaction isolation level Read Uncommitted;set session transaction isolation level Read Uncommitted;

不可重复读:在一个事务内,多次读同一数据,一个事务没有结束,另外一个事务也访问该数据。

其中一个事务连续两次查询发现结果不一致。另外一个事务在对着这个进行修改。两次看到的数据不一致。

set global transaction isolation level Read committed;set session transaction isolation level Read committed;

终端也要同时进行操作一样的操作。

幻读:一个事务对一个表的数据进行了修改,另一个表也修改了表中数据,前一个事务会返现修改的结果不正确类似于出现了幻觉。

不可更新:两边同时对数据进行修改,但是一方先提交,一方后提交,后提交会覆盖先提交的。

D:DURABILITY 持久性:一旦写入数据库,数据不可更改。

4、事务控制语句

begin start transaction:开启一个事务

commit :提交事务

rollback :回滚

设置回滚点:savepoint 名称

回滚到指定的点:rollback to savepoint 名称

可以设置多个还原点,但是只能回一次还原点,一旦提交,所有的还原点全部取消(持久性)。

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

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

相关文章

在 K8s 上使用 KubeBlocks 提供的 MySQL operator 部署高可用 WordPress 站点

引言 WordPress WordPress 是全球最流行的内容管理系统(CMS),自 2003 年发布以来,已成为网站建设的首选工具。其广泛的插件和主题生态系统使用户能够轻松扩展功能和美化外观。活跃的社区提供丰富的资源和支持,进一步…

[RK3588-Android12] 关于如何取消usb-typec的pd充电功能

问题描述 RK3588取消usb-typec的pd充电功能 解决方案: 在dts中fusb302节点下usb_con: connector子节点下添加如下熟悉: 打上如下2个补丁 diff --git a/drivers/usb/typec/tcpm/tcpm.c b/drivers/usb/typec/tcpm/tcpm.c index c8a4e57c9f9b..173f8cb7…

使用OpenCV寻找图像中的轮廓

引言 OpenCV(Open Source Computer Vision Library)是一个开源的计算机视觉和机器学习软件库。它提供了大量的视觉处理功能,包括图像和视频捕获、特征检测与匹配、图像变换、图像分割、颜色空间转换等。在图像处理中,寻找图像中的…

electron项目中实现视频下载保存到本地

第一种方式:用户自定义选择下载地址位置 渲染进程 // 渲染进程// 引入 import { ipcRenderer } from "electron";// 列表行数据下载视频操作,diffVideoUrl 是视频请求地址 handleDownloadClick(row) {if (!row.diffVideoUrl) {this.$message…

【数字电路学习新助手】掌握电路仿真软件,开启数字电路知识的新篇章

在信息科技日新月异的今天,数字电路知识的重要性不言而喻。无论是通信工程、计算机科学与技术,还是电子信息技术等领域,数字电路都是基础中的基础。然而,对于初学者来说,数字电路的学习往往充满了挑战。幸运的是&#…

Axure中继器入门:打造你的动态原型

前言 中继器 是 Axure 中的一个高级功能,它能够在静态页面上模拟后台数据交互的操作,如增加、删除、修改和查询数据,尽管它不具备真实数据存储能力。 中继器就像是一个临时的数据库,为我们在设计原型时提供动态数据管理的体验&a…

中职省培丨2024年大数据技术中职教师专业技能培训班企业参观实践圆满结束

7月17日,“2024年大数据技术中职教师专业技能培训班(省培)”参训老师莅临广东泰迪智能科技股份有限公司产教融合实训中心开展企业参观实践。泰迪智能科技董事长张良均、中职业务部总监李振林、中职业务部经理黄炳德、校企合作经理吴桂锋及来自…

.net core appsettings.json 配置 http 无法访问

1、在appsettings.json中配置"urls": "http://0.0.0.0:8188" 2、但是网页无法打开 3、解决办法,在Program.cs增加下列语句 app.UseAntiforgery();

vue 如何做一个动态的 BreadCrumb 组件,el-breadcrumb ElementUI

vue 如何做一个动态的 BreadCrumb 组件 el-breadcrumb ElementUI 一、ElementUI 中的 BreadCrumb 定义 elementUI 中的 Breadcrumb 组件是这样定义的 <template><el-breadcrumb separator"/"><el-breadcrumb-item :to"{ path: / }">主…

修改文件的默认打开方式

修改文件的默认打开方式 选中文件&#xff0c;右击&#xff0c;选择属性&#xff0c;如图然后点击更改&#xff0c;选择想要的打开方式&#xff0c;再依次点击 应用、保存 即可&#xff0c;如图

Redis中数据分片与分片策略

概述 数据分片是一种将数据分割并存储在多个节点上的技术&#xff0c;可以有效提高系统的扩展性和性能。在Redis中&#xff0c;数据分片主要用于解决单个实例存储容量和性能瓶颈的问题。通过将数据分散存储到多个Redis节点中&#xff0c;可以将负载均衡到不同的服务器上&#…

Visual Studio使用——在vs中给vb.net项目添加新的窗口:新建的方式、添加已有窗口的方式

目录 引出Visual Studio使用vb添加新的窗体自定义代码片段vs显示所有文件 总结Idea安装和使用0.Java下载 和 IDEA工具1.首次新建项目2.隐藏文件不必要显示文件3.目录层级设置4.Settings设置选择idea的场景提示代码不区分大小写 取消git的代码作者显示 引出 Visual Studio使用—…

基于Vue CLI 3构建Vue3项目(Vue2也可参考)

天行健&#xff0c;君子以自强不息&#xff1b;地势坤&#xff0c;君子以厚德载物。 每个人都有惰性&#xff0c;但不断学习是好好生活的根本&#xff0c;共勉&#xff01; 文章均为学习整理笔记&#xff0c;分享记录为主&#xff0c;如有错误请指正&#xff0c;共同学习进步。…

Android Framework学习笔记(4)----Zygote进程

Zygote的启动流程 Init进程启动后&#xff0c;会加载并执行init.rc文件。该.rc文件中&#xff0c;就包含启动Zygote进程的Action。详见“RC文件解析”章节。 根据Zygote对应的RC文件&#xff0c;可知Zygote进程是由/system/bin/app_process程序来创建的。 app_process大致处…

PHP手边酒店多商户版平台小程序系统源码

&#x1f3e8;【旅行新宠】手边酒店多商户版小程序&#xff0c;一键解锁住宿新体验&#xff01;&#x1f6cc; &#x1f308;【开篇&#xff1a;旅行新伴侣&#xff0c;尽在掌握】&#x1f308; 还在为旅行中的住宿选择而纠结吗&#xff1f;是时候告别繁琐的搜索和比价过程&a…

MT6985(天玑9200)芯片性能参数_MTK联发科旗舰5G移动平台处理器

MT6985天玑 9200 旗舰移动平台拥有专业级影像、沉浸式游戏和先进移动显示技术&#xff0c;以及更快捷、覆盖更广的 5G 和 支持 Wi-Fi 7 连接&#xff0c;具有高性能、高能效、低功耗表现。率先采用 Armv9 性能核&#xff0c;全部支持纯 64 位应用&#xff0c;开启高能效架构设计…

搞定前端面试题——ES6同步与异步机制、async/await的使用以及Promise的使用!!!

文章目录 同步和异步async/awaitPromisePromise的概念 同步和异步 ​ 同步&#xff1a;代码按照编写顺序逐行执行&#xff0c;后续的代码必须等待当前正在执行的代码完成之后才能执行&#xff0c;当遇到耗时的操作&#xff08;如网络请求等&#xff09;时&#xff0c;主线程会…

Java二十三种设计模式-抽象工厂模式(3/23)

抽象工厂模式&#xff1a;复杂系统的灵活构建者 引言 在软件开发中&#xff0c;抽象工厂模式是一种提供接口以创建相关或依赖对象族的创建型设计模式。这种模式允许客户端使用一个共同的接口来创建不同的产品族&#xff0c;而无需指定具体类。 基础知识&#xff0c;java设计模…

算法 —— LRU算法

算法 —— LRU算法 LRULRU算法的工作原理&#xff1a;实现方法&#xff1a;性能考虑&#xff1a; 模拟过程splice函数对于std::list和std::forward_list基本语法&#xff1a;功能描述&#xff1a; 示例&#xff1a;注意事项&#xff1a; 如果大家已经学习过了Cache的替换算法和…

ElementUIV12相关使用方法

今日内容 零、 复习昨日 零、 复习昨日 一、Element UI Element&#xff0c;一套为开发者、设计师和产品经理准备的基于 Vue 2.0 的桌面端组件库 官网&#xff1a; https://element.eleme.cn/#/zh-CN Element Plus,基于 Vue 3&#xff0c;面向设计师和开发者的组件库 官网: htt…