MySQL的索引、事务

MySQL的索引

索引的概念

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

索引值和数据是一一映射的关系。

索引的作用

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

加快数据库查询的速度。

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

优点

1、设置了索引之后,数据库可以利用索引可以快速的定位,大大提高查询的速度。(主要作用)

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

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

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

缺点

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

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

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

创建索引的依据和原则

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

2、记录超过三百行数据的表,应该创建索引

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

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

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

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

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

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

索引的类型

b-tree 索引

b-树索引

绝大部分的数据都是使用B-树索引

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

哈希索引:

索引对应的哈希值的方式获取表的巨鹿行,速度表叫慢,用的少。

创建索引

主键索引

是一种特殊的唯一索引。

create table member (
id int(10),
name varchar(10),
cardid int(18),
phone int(11),
address varchar(50),
remark text,
#test也是数据类型的一种,和char、varchar性质相同,都是字符串
#不需要长度的参数,可以作为大文本的列,可以储存65535个字符
index name_index (name)    #创建索引条件
);
命令行添加多个内容
insert into member values (3,'阳哥','1122','119','南京','VIP2'),
(2,'王','123456','120','病','vip');
利用索引查看
explain select * from member where id=1
​
explain  查询当前语句使用索引的情况

唯一索引:

可以使用key的方式创建,也可以使用索引的方式创建

alter table 表名 add unique index 索引名 (列名)
alter table member add unique index phone_index (phone)
create unique index 索引名 on 表名 (列名)
create unique index cardid_index on member (cardid)
explain select * from member where id=1

删除索引

drop index 索引名  on  表名
drop index phone_index on member
alter table 表名  drop index  索引名
alter table member drop index name_index

组合索引

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

alter table member add constraint uc_name_cardid_phone unique (name,cardid,phone);
组合索引的用法
select * from 表名  where 创建的索引名=查找条件 and 创建的索引名=查找条件  and 创建的索引名=查找条件
select * from member where name=  and cardid=  and phone=  ;

全文索引

:适用于模糊查询

创建全文索引
​
create fulltext index remark_index on member (remark)
模糊查询
explain select * from 表名  where match (列名) against (‘条件’);
explain select * from member where match (remark) against ('vip');

实验

CREATE TABLE member (
id int NOT NULL,
name varchar(10) NOT NULL,
cardid int NOT NULL,
address varchar(50) NOT NULL,
time timestamp NOT NULL ON UPDATE CURRENT_TIMESTAMP,
remark text,
PRIMARY KEY (id),
UNIQUE KEY cardid_index (cardid) USING BTREE,
KEY name_index (name),
fulltext index remark_inex (remark)
);

事务

mysql的事务

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

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

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

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

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

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

A:ATOMICITY 原子性

C:CONSISTENCY 一致性

I:ISOLATION 隔离性

D:DURABILITY 持久性

原子性:

事务的最小控制单位,不可分割。要么都成功要么都失败。

一致性:

事务开始前和事务结束之后,数据库的完整性没有被破坏。开始时数据是一致的结束时数据也要一致

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

隔离性: 并发环境中,不同的事务同时操作相同的数据时,每个事物都有自己完整的数据空间。

对数据的修改所发生的并发事务是隔离的。每个事务之间都是独立。

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

隔离性:

1、未提交读,read uncommitted RU

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

2、提交读,read committed RC

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

oracle和sql sever

3、可重复读,一个事务在执行中,执行两次相同的select语句,得到的结果都是相同

mysgl的默认隔离选项 防止脏读和不可重复读。

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

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

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

幻读:一个事务对一个表的数据进行了修改,另一个表也修改了表中的数据,前一个事务。

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

持久性:

一旦写入数据库,数据不可更改。

事务的控制语句

begin ;star transaction
开启一个事务
commitl
提交事务
rollback
回滚
savepoint 名称
设置回滚点
rollback to savepoint 回滚的名称
回滚到指定点

还原点可以有多个,只能还原一次还原后其他还原点失效。

设置多个还原点,提交事务后还原点失效。

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

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

相关文章

WsgiDAV:强大的 WebDAV 解决方案

一、软件介绍 WsgiDAV 是一款卓越的开源 WebDAV 服务器和客户端库,由 Python 精心编写而成。它为用户搭建了一座通过 HTTP/HTTPS 协议访问和管理远程文件系统的便捷桥梁。 WsgiDAV 的核心是一个严格遵循 WebDAV 标准的中间件,能够与任何 WSGI 兼容的 W…

Python语法大全

#前言: 关于此篇博客主要是关于对Python语法的总结,有过C语言学习经历的人看的会更加通俗易懂!(当然没学过C的理解起来也是很容易)知识点言简意赅,内容全面,多有代码解释!且有多处实…

【数据结构】--- 栈和队列

前言 前面学习了数据结构的顺序表、单链表、双向循环链表这些结构;现在就来学习栈和队列,这里可以简单的说栈和队列是具有特殊化的线性表 一、栈 1.1、栈的概念和结构 栈是一种遵循先入后出逻辑的线性数据结构。 栈是一种特殊的线性表,它只允…

表格竖向展示

最近在做手机端web页面,页面中需要有个表格来显示数据,但是由于数据太多页面太窄,table展示横向滑动的话感觉很丑。所以让表格竖向显示了 具体页面如下: 实现代码:当然代码里面绑定的数据啊什么的你都可以修改为自己的内容&#…

PyTorch高级特性与性能优化

PyTorch高级特性与性能优化 引言: 在深度学习项目中,使用正确的工具和优化策略对于实现高效和有效的模型训练至关重要。PyTorch,作为一个流行的深度学习框架,提供了一系列的高级特性和性能优化方法,以帮助开发者充分利…

TDC 5.0:多集群统一纳管,构建一体化大数据云平台

近期,星环科技数据云平台Transwarp Data Cloud(简称TDC)5.0版本正式发布,TDC5.0架构屏蔽底层多个TDH集群的差异,采用统一操作模式,新增一个多集群抽象与管理层,能够实现多集群网络互通、跨集群资…

驱动框架——CMSIS第一部分 RTE驱动框架介绍

一、介绍CMISIS 什么是CMSIS(cortex microcontrol software interface standard一种软件标准接口),官网地址:https://arm-software.github.io/CMSIS_6/latest/General/index.html 包含的core、driver、RTOS、dsp、nn等部分&…

【MySQL】11.使用 C 语言访问 MySQL

使用C语言访问MySQL 一.检查第三方库是否配置成功二.MySQL 常用接口1.创建,销毁操作句柄2.使用句柄连接数据库3.向 mysqld 发送指令4.查询相关函数 三.使用示例 一.检查第三方库是否配置成功 想要使用代码连接数据库,必须使用 MySQL 官方提供的第三方库。…

redis服务器同 redis 集群

搭建redis服务器 修改服务运行参数 常用命令常用命令 创建redis集群 准备做集群的主机,不允许存储数据、不允许设置连接密码 配置服务器: 1、在任意一台redis服务器上都可以执行创建集群的命令。 2、--cluster-replicas 1 给每个master服务器分配1台…

Java之反射和枚举及lambda表达式

1.反射 1 定义 Java 的反射( reflflection )机制是在 运行 状态中,对于任意一个类,都能够知道这个类的 所有属性和方法 ;对于任 意一个对象,都能够调用它的任意方法和属性,既然能拿到那么&…

链表面试练习习题(Java)

1. 思路: 创建两个链表,一个用来记录小于x的结点,一个用来记录大于等于x的结点,然后遍历完原链表后,将小于x的链表和大于等于x的链表进行拼接即可 public class Partition { public ListNode partition(ListNode pH…

【Java面向对象】抽象类和接口

文章目录 1.抽象类2.常见的抽象类2.1 Number类2.2 Calendar 和GregorianCalendar 3.接口4.常见接口4.1 Comparable 接口4.2 Cloneable 接口4.3 深浅拷贝 5.类的设计原则 1.抽象类 在继承的层次结构中,每个新的子类都使类变得更加明确和具体。如果从一个子类向父类追…

IDEA中创建一个SpringBoot项目并提交到git仓库(日常开发-保姆级手把手超详细截图)

日常开发 第一步: 第二步: 🎈边走、边悟🎈迟早会好 Git是什么? Git是一款免费、开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目。 Git是一个开源的分布式版本控制系统,可…

【保卫花果山】游戏

游戏介绍 拯救花果山是一款玩家能够进行趣味闯关的休闲类游戏。拯救花果山中玩家需要保护花果山的猴子,利用各种道具来防御妖魔鬼怪的入侵,游戏中玩家需要面对的场景非常的多样,要找到各种应对敌人的方法。拯救花果山里玩家可以不断的进行闯…

[米联客-安路飞龙DR1-FPSOC] FPGA基础篇连载-20 读写I2C接口的RTC时钟芯片

软件版本:Anlogic -TD5.9.1-DR1_ES1.1 操作系统:WIN10 64bit 硬件平台:适用安路(Anlogic)FPGA 实验平台:米联客-MLK-L1-CZ06-DR1M90G开发板 板卡获取平台:https://milianke.tmall.com/ 登录“米联客”FPGA社区 ht…

超声波清洗机选哪款比较好?推荐四款性价比超高型号

2024年的超声波清洗机技术已经取得了显著进步。市面上的超声波清洗机种类繁多,功能各异,有的可以彻底清洁眼镜,有的还能进行消毒等。今天,我向大家推荐几款我亲自测试过的超声波清洗机,它们的性能都相当优秀&#xff0…

分布式搜索引擎ES-elasticsearch入门

1.分布式搜索引擎:luceneVS Solr VS Elasticsearch 什么是分布式搜索引擎 搜索引擎:数据源:数据库或者爬虫资源 分布式存储与搜索:多个节点组成的服务,提高扩展性(扩展成集群) 使用搜索引擎为搜索提供服务。可以从海量…

Android获取当前屏幕显示的是哪个activity

在 Android 中,要获取当前屏幕显示的 Activity,可以使用以下几种方法: 方法一:使用 ActivityManager 获取当前运行的任务信息 这是一个常见的方法,尽管从 Android 5.0 (API 21) 开始,有些方法变得不太可靠…

Java语言程序设计——篇五(2)

有关数组的方法 💥增强的for循环实战演练 数组元素的复制实战演练 数组参数与返回值💢java.util.Arrays类数组的排序实战演练 元素的查找数组元素的复制填充数组元素数组的比较实战演练 💥增强的for循环 增强的for循环,它是Java …

MySQL(6)内置函数,复合查询.

目录 1.内置函数; 2.复合查询; 1.内置函数: 1.1 日期函数: 时分秒: 时间戳: 基本日期上加日期: 基本日期减去日期: 日期相差天数: 🌰 创建一张表,记录生日: 创建一个留言表: 显示所有留言信息,发布日期只显示日期,不用显示时间: …