MySQL索引与表结构

MySQL索引

索引的作用
  1. 提高查询速度:索引类似于书的目录,通过索引可以快速找到所需数据,而不必扫描整个表。
  2. 加速排序和分组操作:索引可以加速ORDER BYGROUP BY操作。
  3. 提高连接操作的性能:在多表连接查询中,索引可以显著提高连接的效率。
索引的类型
  1. 主键索引(PRIMARY KEY):唯一标识表中的每一行,不能包含空值。
  2. 唯一索引(UNIQUE INDEX):保证列中的所有值都是唯一的,可以包含空值。
  3. 普通索引(INDEX):用于加速查询,不要求唯一性。
  4. 全文索引(FULLTEXT INDEX):用于全文搜索,仅适用于CHAR、VARCHAR和TEXT列。
  5. 复合索引(Composite Index):由多个列组成的索引。
索引的使用
  • 创建索引CREATE INDEX index_name ON table_name(column1, column2, ...)
  • 删除索引DROP INDEX index_name ON table_name
索引的代价
  • 存储空间:索引需要额外的存储空间。
  • 维护开销:每次数据插入、更新或删除时,索引也需要相应更新。

MySQL表结构

表的类型
  1. InnoDB:支持事务处理、外键、行级锁,适用于高并发写操作。
  2. MyISAM:不支持事务处理和外键,读写速度快,适用于只读或读多写少的场景。
  3. MEMORY:数据存储在内存中,速度快,但数据易丢失,适用于临时数据或缓存。
  4. CSV:数据以CSV格式存储,易于导出和导入,不适合高并发环境。
表的组成部分
  1. 表的定义:表的名称、存储引擎、字符集等。
  2. 列的定义:列的名称、数据类型、约束(如NOT NULL、UNIQUE、PRIMARY KEY、FOREIGN KEY)。
  3. 数据行:实际存储的数据,每行代表一个记录。
表的操作
  • 创建表CREATE TABLE table_name (column1 datatype constraints, column2 datatype constraints, ...)
  • 修改表ALTER TABLE table_name ADD column_name datatypeALTER TABLE table_name MODIFY column_name datatypeALTER TABLE table_name DROP column_name
  • 删除表DROP TABLE table_name
  • 插入数据INSERT INTO table_name (column1, column2, ...) VALUES (value1, value2, ...)
  • 查询数据SELECT column1, column2 FROM table_name WHERE condition
  • 更新数据UPDATE table_name SET column1 = value1, column2 = value2 WHERE condition
  • 删除数据DELETE FROM table_name WHERE condition

事务的ACID特性

  1. 原子性(Atomicity)

    • 原子性确保事务中的所有操作要么全部完成,要么全部不完成。如果事务在执行过程中发生错误,所有已执行的操作将被撤销,数据库恢复到事务开始前的状态。
  2. 一致性(Consistency)

    • 一致性确保事务在完成后,数据库从一个一致性状态转变到另一个一致性状态。事务的执行不能破坏数据库的完整性约束。
  3. 隔离性(Isolation)

    • 隔离性确保同时进行的事务彼此之间不受干扰。一个事务的中间状态对其他事务是不可见的。隔离级别有多种,包括读未提交(Read Uncommitted)、读已提交(Read Committed)、可重复读(Repeatable Read)和串行化(Serializable)。
  4. 持久性(Durability)

    • 持久性确保事务一旦提交,其结果将永久保存,即使系统发生故障也不会丢失数据。

事务的操作

  • 开始事务START TRANSACTIONBEGIN
  • 提交事务COMMIT
  • 回滚事务ROLLBACK

示例

假设有一个银行转账操作,需要从账户A转账100元到账户B,这一操作可以用一个事务来保证其原子性和一致性:

START TRANSACTION; UPDATE accounts SET balance = balance - 100 WHERE account_id = 'A'; UPDATE accounts SET balance = balance + 100 WHERE account_id = 'B'; COMMIT;

如果在两条UPDATE语句之间发生了错误,例如系统崩溃,事务将被回滚:

START TRANSACTION; UPDATE accounts SET balance = balance - 100 WHERE account_id = 'A'; -- 假设此处发生错误或系统崩溃ROLLBACK;

这样,账户A的余额将恢复到最初的状态,保证数据一致性。

隔离级别

不同的隔离级别提供不同程度的数据隔离,影响并发事务的执行效果:

  1. 读未提交(Read Uncommitted):事务可以读取其他未提交事务的数据,可能导致脏读。
  2. 读已提交(Read Committed):事务只能读取其他已提交事务的数据,防止脏读,但可能导致不可重复读。
  3. 可重复读(Repeatable Read):在一个事务内多次读取同一数据结果一致,防止脏读和不可重复读,但可能导致幻读。
  4. 串行化(Serializable):最高的隔离级别,通过强制事务串行执行,防止脏读、不可重复读和幻读。

高级事务概念

  1. 保存点(Savepoint)

    • 保存点允许在一个事务内设置多个回滚点,从而可以部分回滚事务而不是全部回滚。
    • 创建保存点:SAVEPOINT savepoint_name
    • 回滚到保存点:ROLLBACK TO SAVEPOINT savepoint_name
    • 释放保存点:RELEASE SAVEPOINT savepoint_name
  2. 事务隔离级别(Isolation Levels)

    • 脏读(Dirty Read):一个事务可以读取另一个未提交事务修改的数据。
    • 不可重复读(Non-Repeatable Read):一个事务在读取相同记录时,可能会因为另一个已提交的事务修改而读取到不同的值。
    • 幻读(Phantom Read):一个事务在执行两次相同的查询时,结果集不同,因为另一个已提交的事务在这期间插入或删除了数据。
  3. 分布式事务(Distributed Transaction)

    • 涉及多个数据库或其他资源管理器的事务,通常需要一个协调者来管理事务的原子性和一致性。
    • 两阶段提交协议(2PC):第一阶段准备提交(Prepare to Commit),第二阶段正式提交(Commit)。

事务使用的最佳实践

  1. 使用合适的隔离级别

    • 根据应用的需求选择合适的隔离级别,以在性能和一致性之间取得平衡。
    • 对于大多数应用,Read Committed 是一个常见的选择。
  2. 事务的大小

    • 尽量将事务保持在一个合理的大小范围内,以减少锁的持有时间和资源消耗。
    • 避免长时间运行的事务,因为它们可能会持有锁很长时间,影响并发性能。
  3. 错误处理

    • 在事务操作中,处理可能发生的错误,并在需要时进行回滚以确保数据一致性。
    • 使用异常处理机制来捕获错误并执行适当的回滚操作。
  4. 日志记录

    • 记录事务的开始和结束时间、操作的类型和影响的行数等信息,以便在出现问题时进行排查。

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

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

相关文章

如何通过财务指标筛选股票?

《战胜华尔街》的第九章是《房地产选股之道:从利空消息中选股》,但感觉林奇先生大半的篇幅并没有讲典型的房地产业股票,而是在讲园艺类股票;也没有着重于利空消息,而是在讲估值。 不管怎么样,在阅读《战胜…

20240627 每日AI必读资讯

🔍挑战英伟达!00 后哈佛辍学小哥研发史上最快 AI 芯片 - 3名大学辍学生创立、目前仅35 名员工、刚筹集1.2 亿美元的团队:Etched。 - 史上最快Transformer芯片诞生了! - 用Sohu跑Llama 70B,推理性能已超B200十倍&…

IEEE-Trans系列!版面稀缺,现在投稿可加急处理,代表作神刊!

【SciencePub学术】今天小编给大家推荐一本计算机领域的SCI,隶属于IEEE出版社旗下,现已稳定检索49年!影响因子4.0-5.0之间,JCR1区,中科院2区,质量口碑甚誉! 有论文发表需求的学者可以后台联系张…

贪吃蛇项目:GameRun与GameEnd部分:游戏的主体运行与善后部分

准备工作:打印得分信息 在进行GameStart之前,我们需要在地图的右侧打印帮助信息,以及目前玩家的得分情况和一个食物在当前速度下的得分情况(加速的状态下按比例增加食物的分数,减速的状态下则相反)&#xf…

运维岗高危操作

序号 高危操作指令 可能存在风险 维护操作要求 1 rm –rf rm –rf是删除文件夹和里面附带内容的一种最快捷的方法,可能会文件误删,导致数据丢失 使用rm –rf命令时千万要小心,可以在.bashrc里面添加: alias rm ‘rm -i’ ,…

建筑信息模型(BIM)的应用与案例研究:塑造建筑与施工的新纪元

在数字化浪潮的推动下,建筑信息模型(Building Information Modeling, BIM)已从一项新兴技术发展为建筑与施工领域不可或缺的核心工具。本文将深入探讨BIM技术的应用原理,分享实际案例,揭示其如何引领建筑行业走向更加高…

Docker(八)-Docker运行mysql8容器实例

1.运行mysql8容器实例并挂载数据卷 -e:配置环境变量 --lower_case_table_names1 设置忽略表名大小写一定要放在镜像之后运行mysql8容器实例之前,先查看是否存在mysql8镜像以及是否存在已运行的mysql实例docker run -d -p 3306:3306 --privilegedtrue -v 【宿主机日…

2024年合肥市中小企业数字化转型试点城市建设奖励政策申报对象、条件指南

2024年合肥市支持中小企业数字化转型试点城市建设奖励政策申报对象、条件指南如下,合肥市的企业单位可以了解一下 01 鼓励数字化水平提升 对2024年完成数字化改造且中小企业数字化水平评测达到二级、三级、四级的试点企业,按照不超过企业数字化改造投…

2.深入探索Python世界:从快捷键到变量类型,掌握数据运算的奥秘

在Python编程的奇妙之旅中,我们不仅需要理解代码的逻辑和结构,还需要熟练掌握工具和技巧,以便更高效地编写和调试代码。本篇文章将带您深入了解PyCharm的常用快捷键、Python中的注释、函数、变量、数据类型以及基本的运算符,为您揭…

CF478B Random Teams

CF478B Random Teams 结论题,难度不高。 首先根据经验以及观察样例可以猜到: 要使答案最小,需要尽可能平均分配。要使答案最大,需要 m − 1 m-1 m−1 个组每组 1 1 1 个人, 1 1 1 个组 n − m 1 n-m1 n−m1 个人…

修复 pprof ---node_exproter访问漏洞(go-pprof-leak)

前言: ** 在Go语言中,pprof和debug包是用来检测和避免goroutine泄漏,避免导致goroutine泄漏,进而消耗大量系统资源。不过对于安全而言确又存在一定风险,** 风险: 通过node_exporter web发现 190.168.46.1…

关于Claude3.5-Sonnet引以为傲的功能,在半年前就被某国产平台无情碾压的那档事!

前言: Anthropic声称其每隔几个月就会对Claude发布一次重大版本的更新。距离今年3月份Claude3发布,已经又过去了3个多月的时间。果不其然,6月21日Anthropic 在X上正式官宣发布全新大模型 Claude3.5 Sonnet,号称它能够碾压GPT4o&a…

前端Web开发HTML5+CSS3+移动web视频教程 Day1

链接 HTML 介绍 写代码的位置:VSCode 看效果的位置:谷歌浏览器 安装插件 open in browser: 接下来要保证每次用 open in browser 打开的是谷歌浏览器。只需要将谷歌浏览器变为默认的浏览器就可以了。 首先进入控制面板,找到默…

Windows11环境下安装Vmware Workstation 16的方法

1、下载VMWare 从网盘下载 https://pan.baidu.com/share/init?surlUpcnqiRv6nUuzO0EOZ22zg 提取码:8888 2、安装VMware虚拟机   第1步:双击上面准备好的Vmware Workstation 16虚拟机软件安装包,即可看到如图所示的安装向导初始界面&#x…

编程设计思想

健康检查脚本 nmap:扫描端口 while true do healthycurl B:httpPORT/healthy -i | grep HTTP/1.1 | tail -n 1 | awk {print $2} done 批量操作类型脚本(记录每一步日志) 将100个nginx:vn推送到harbor仓库192.168.0.100 根据镜像对比sha值…

数据中心网络100GbE发展趋势

100G光产品的技术突破不断满足超大规模数据中心的需求。5G的发展使许多行业能够实现高数据吞吐量和低延迟。从2017年至今,不少企业已经升级到100G数据中心网络,进而追求400G/800G网络。与此同时,其他小型数据中心已逐渐升级至100G。 是什么推…

安装与配置:MySQL的环境搭建之旅(二)

目录 引言:从理论到实践的跨越 一、安装MySQL:跨平台的便捷指南 Windows环境 Linux环境 macOS环境 二、基本配置:端口设置与字符集选择 三、从零到一的蜕变 引言:从理论到实践的跨越 在前一章节《MySQL简介》中&#xff0c…

【efinix】efinity如何安装官方补丁patch

efinix官网可以下载efinity的官方补丁。 下载 efinity-2023.2.307.5.10-windows-x64-patch.zip 解压缩补丁zip 压缩包内容 files/ : updated files to be copied into the Efinity installation run.sh : patch installation script (Linux on…

ZGC垃圾收集的主要流程

值得说明的是,在执行就地迁移时,ZGC 必须首先压缩指定为对象迁移区域内的对象,这可能会对性能产生负面影响。增加堆大小可以帮助 ZGC 避免使用就地迁移。 如上图,ZGC 的工作流程主要包括以下几个步骤: (STW…

Sklearn 进阶教程

Sklearn 进阶教程 Scikit-learn(sklearn)是Python中最受欢迎的机器学习库之一,它提供了简单且高效的工具,用于数据挖掘和数据分析,适用于各种机器学习任务。本教程将详细介绍如何使用sklearn进行进阶的机器学习任务&a…