MySQL索引和事务 事务隔离级别

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群版 2核4GB 100GB
推荐场景:
搭建个人博客
云数据库 RDS MySQL,高可用版 2核4GB 50GB
简介: MySQL索引和事务 事务隔离级别

文章目录


MySQL索引

当我们用数据库查询数据的时候,如果它只有很小的数据量时,可能查询不同数据的时候所消耗的时间并没有太大区别,但如果是一个有着几百万甚至几千万的数据库呢?此时你就会发现你查询一条数据的时间甚至要消耗十几秒,对于人来说可能这十几秒并不算什么,可是对于计算机来说这是坚决不被允许的,可是为什么会造成这样的情况呢?

当我们查询的使用的该字段没有索引的时候,它是会从第一条数据依次查询到最后一条,尽管它找到了唯一符合条件的数据的时候,它也会接着找到最后一条,会消耗大量的时间


当你给某列加索引的时候,该列就会形成二叉树,将中间值作为该二叉树根节点,此后找寻数据,只需要根据大小进行比较就可以快速锁定数据位置




添加索引

添加唯一索引

添加普通索引




添加主键索引

方法一:


方法二:


如何选择
如果某列的值,是不会重复的,则优先考虑使用unique索引,否则使用普通索引

删除索引


删除主键索引



查询索引

方式一:

方式二:

方式三:


哪些列上适合使用索引
1.较频繁的作为查询条件字段应该创建索引
2.唯一性太差的字段不适合单独创建索引,即使频繁的作为条件查询条件
3.更新非常频繁的字段不适合创建索引
4.不会出现在where子句中字段不该创建索引


MySQL事务

什么是事务?

事务用于保证数据的一致性,它由一组相关的dml(增 删 改)语句组成,该组的dml语句要么全部成功,要么全部失败回滚

将一个账号的钱转到另一个账户上
需求:

1.将转账账户减去100

2.将接收账户加上100

问题:第1条语句执行成功,但是第2条语句失败


提交事务(一旦提交之后不可以回退,会自动删除所有保存点,会确认事务的变化,结束事务、删除保存点、释放锁、数据生效,其它会话可以查看到事物变化后的新数据)其产生这种现象和隔离级别有关系


细节

1.如果不开始事务,默认情况下,dml操作是自动提交的,不能回滚

2.如果开始了一个事务,你没有创建保存点,你可以执行 rollback,默认就是回退到你事务开始的状态

3.可以在事务中(还没有提交的时候),创建多个保存点

4.可以在事务没有提交前,选择回退到哪个保存点

5.InnoDB存储引擎支持事务,MyISAM不支持

6.开启一个事务 start transaction,set autocommit=off

mysql事务隔离级别

多个连接开启各自事务操作事务来操作数据库中的数据时,数据库系统来负责隔离操作,从而以保证各个连接在获取数据时的准确性

否则会出现脏读、幻读、不可重复读

脏读:当一个数据读取到另一个事务未提交的修改

就好比两个人操作同一个账户,一个人存钱,一个人查询,刚存进去100还没有提交,可是查询的人已经查到了这个数据,但发生异常之后,存钱发生回滚,导致读取脏数据

不可重复读:同一查询在同一事务中多从进行,由于其他提交事务所做的修改或删除,每次返回不同的结果集

就好比你想知道你账户有多钱,当你读取之后,还没有提交,突然你妈妈存了400,并且提交了事务,再次读取后就没有读取到原来的结果了

幻读:同一次查询在事务中多次进行,由于其他提交事务所作的插入操作,每次返回不同放入结果集

相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
8天前
|
SQL 关系型数据库 MySQL
MySQL 事务回滚。在执行删除、更新等操作时,防止误操作
MySQL 事务回滚。在执行删除、更新等操作时,防止误操作
21 2
|
3天前
|
SQL 存储 关系型数据库
mysql加索引真的会锁表吗?揭秘背后的技术细节与规避策略
【8月更文挑战第16天】在数据库管理中,添加索引能大幅提升查询效率。MySQL执行此操作时的锁定行为常引起关注。文章详细解析MySQL中索引添加时的锁定机制及其原理。不同存储引擎及SQL语句影响锁定策略:MyISAM需全表锁定;InnoDB提供更灵活选项,如使用`ALTER TABLE... LOCK=NONE`可在加索引时允许读写访问,尽管可能延长索引构建时间。自MySQL 5.6起,在线DDL技术可进一步减少锁定时间,通过`ALGORITHM=INPLACE`和`LOCK=NONE`实现近乎无锁的表结构变更。合理配置这些选项有助于最小化对业务的影响并保持数据库高效运行。
11 4
|
3天前
|
存储 SQL 关系型数据库
深入解析MySQL事务机制和锁机制
深入解析MySQL事务机制和锁机制
|
3天前
|
SQL JavaScript 关系型数据库
Mysql索引不当引发死锁问题
本文通过真实案例解析了MySQL在高并发环境下出现死锁的问题。数据库表`t_award`包含多个索引,但在执行特定SQL语句时遭遇索引失效,导致更新操作变慢并引发死锁。分析发现,联合索引`(pool_id, identifier, status, is_redeemed)`因`identifier`允许为空值而导致索引部分失效。此外,`pool_id`上的普通索引产生的间隙锁在高并发下加剧了死锁风险。为解决此问题,文中提出了调整索引顺序至`(pool_id, status, is_redeemed, identifier)`等方案来优化索引使用,进而减轻死锁现象。
|
5天前
|
缓存 NoSQL Redis
一天五道Java面试题----第九天(简述MySQL中索引类型对数据库的性能的影响--------->缓存雪崩、缓存穿透、缓存击穿)
这篇文章是关于Java面试中可能会遇到的五个问题,包括MySQL索引类型及其对数据库性能的影响、Redis的RDB和AOF持久化机制、Redis的过期键删除策略、Redis的单线程模型为何高效,以及缓存雪崩、缓存穿透和缓存击穿的概念及其解决方案。
|
5天前
|
算法 关系型数据库 MySQL
一天五道Java面试题----第七天(mysql索引结构,各自的优劣--------->事务的基本特性和隔离级别)
这篇文章是关于MySQL的面试题总结,包括索引结构的优劣、索引设计原则、MySQL锁的类型、执行计划的解读以及事务的基本特性和隔离级别。
|
5天前
|
算法 关系型数据库 MySQL
一天五道Java面试题----第七天(mysql索引结构,各自的优劣--------->事务的基本特性和隔离级别)
这篇文章是关于MySQL的面试题总结,包括索引结构的优劣、索引设计原则、MySQL锁的类型、执行计划的解读以及事务的基本特性和隔离级别。
|
6天前
|
SQL 安全 关系型数据库
Go 语言中的 MySQL 事务操作
在现代应用中,确保数据完整与一致至关重要。MySQL的事务机制提供了可靠保障。本文首先解释了事务的概念及其ACID特性,随后介绍了如何在Go语言中使用`database/sql`包进行MySQL事务操作。通过一个银行转账的例子,演示了如何通过Go开启事务、执行操作并在必要时回滚或提交,确保数据一致性。最后,还讨论了不同事务隔离级别的含义及如何在Go中设置这些级别。通过本文的学习,开发者能更好地掌握MySQL事务的应用。
11 0
|
13天前
|
缓存 关系型数据库 MySQL
MySQL调优秘籍曝光!从索引到事务,全方位解锁高可用秘诀,让你的数据库性能飞起来!
【8月更文挑战第6天】MySQL是顶级关系型数据库之一,其性能直接影响应用的高可用性与用户体验。本文聚焦MySQL的高性能调优,从索引设计到事务管理,逐一解析。介绍如何构建高效索引,如联合索引`CREATE INDEX idx_order_customer ON orders(order_id, customer_id);`,以及索引覆盖查询等技术。
37 0
|
5天前
|
存储 关系型数据库 MySQL
MySQL——数据库备份上传到阿里云OSS存储
MySQL——数据库备份上传到阿里云OSS存储
20 0