mysql一文整理汇总

一文整理完MySQL关系型数据库相关知识 在开发中,数据库是专门用来存取数据的软件。数据库的职责就是管理数据的。根据存取数据的类型分为关系型数据库和非关系型数据库数据存储后呈现出来的效果类似上图的,是关系型数据库数据存储后呈现出来的效果类似上图的,是非关系型数据库。 阅读详情

mysql 存储引擎

MySQL 的存储引擎种类很多,有MyISAM、InnoDB、、CSV、Memory、Merge、NDB等等,以下介绍常用的存储引擎:

  • 在MySQL 5.1 及之前的版本,MyISAM 是默认的存储引擎。MyISAM
    提供了大量的特性,包括全文索引、压缩、空间函数(GIS)等,但MyISAM 不支持事务、不支持外键、不支持行级锁(仅支持表级锁)。特点是访问速度快,对事务完整性没有要求。以select、insert为主的应用基本上都可以用这个引擎来创建表
  • MySQL
    5.5之后默认的事务型引擎修改为InnoDB。它被设计用来处理大量的短期事务,短事务大部分情况是正常提交的,很少会被回滚。它是事务安全的,具有提交、回滚和崩溃恢复能力。InnoDB表默认为行级锁,是基于聚簇索引建立的。聚簇索引对主键查询有很高的性能。不过它的二级索引中必须包含主键列,所以如果主键列很大的话,其他的索引都会很大。存储格式是平台独立的,可以将数据和索引文件复制到其他平台。

sql 优化

考虑表有没有加上索引,加上索引考虑索引是否失效,失效的原因是:

  • 数据类型不匹配
  • 索引列加上函数
  • 索引列参与逻辑运算
  • 组合索引配置最左前缀 如abc 只要a出现就走索引 否则失效
  • or 关键字必须前后都要加上索引否则索引失效
  • like 前面加% 索引失效

建立索引的原则:

  • 经常在where条件后面出现的字段加上索引,但是经常被更新的字段,不建议加索引, 一张表的索引不超过6个,原因是更新、删除、添加要更新索引文件,做成大量的磁盘io,如果必须得建立6个以上索引,考虑使用组合索引表示状态的字段不建议加索引。

  • 如果做表关联查询,表的数据过大达到千万级。可以进行sql拆分。基于单表查询。

  • 可以考虑加上冗余字段。减少表连接的操作。

mysql 分库分表如何实现

分库分表:mycat
server.xml:配置用户名密码
schema.xml :配置逻辑库和逻辑表,和表的分片规则,和分片的物理路径

<schema> <table>  <dataNode> <dataHost> <writeHost> <readHost>

rule.xml: 具体的分片规对应的配置文件和class 文件

mysql 读写分离原理

在这里插入图片描述

mysql 索引原理

在这里插入图片描述
在这里插入图片描述

mysql 索引类型

  • normal:表示普通索引
  • unique:表示唯一的,不允许重复的索引,如果该字段信息保证不会重复例如身份证号用作索引时,可设置为unique
  • full textl: 表示 全文搜索的索引。 FULLTEXT
    用于搜索很长一篇文章的时候,效果最好。用在比较短的文本,如果就一两行字的,普通的 INDEX 也可以。
  • 主键 索引:主键是一种唯一性索引,但它必须指定为“PRIMARY KEY”
  • 单列索引:单列索引就是常用的一个列字段的索引,常见的索引。
  • 多列索引 (组合索引):多列索引就是含有多个列字段的索引

mysql都有什么锁

MySQL有三种锁的级别:页级、表级、行级。

  1. 表级锁:开销小,加锁快;不会出现死锁;锁定粒度大,发生锁冲突的概率最高,并发度最低。
  2. 行级锁:开销大,加锁慢;会出现死锁;锁定粒度最小,发生锁冲突的概率最低,并发度也最高。
  3. 页面锁:开销和加锁时间界于表锁和行锁之间;会出现死锁;锁定粒度界于表锁和行锁之间,并发度一般

mysql 死锁产生的原因如何解决

所谓死锁<DeadLock>: 是指两个或两个以上的进程在执行过程中,
因争夺资源而造成的一种互相等待的现象,若无外力作用,它们都将无法推进下去.此时称系统处于死锁状态或系统产生了死锁,这些永远在互相等竺的进程称为死锁进程.表级锁不会产生死锁.所以解决死锁主要还是针对于最常用的InnoDB.

假设我们有个需求
将投资的钱拆成几份随机分配给借款人。
起初业务程序思路是这样的:
投资人投资后,将金额随机分为几份,然后随机从借款人表里面选几个,然后通过一条条select for update 去更新借款人表里面的余额等。
抽象出来就是一个session通过for循环会有几条如下的语句:
Select * from xxx where id=‘随机id’ for update
基本来说,程序开启后不一会就死锁。
这可以是说最经典的死锁情形了。
例如两个用户同时投资,A用户金额随机分为2份,分给借款人1,2
B用户金额随机分为2份,分给借款人2,1
由于加锁的顺序不一样,死锁当然很快就出现了。

对于这个问题的改进很简单,直接把所有分配到的借款人直接一次锁住就行了。
Select * from xxx where id in (xx,xx,xx) for update
在in里面的列表值mysql是会自动从小到大排序,加锁也是一条条从小到大加的锁

参考资料:点击这里

mysql 如何避免死锁

如何避免发生死锁

1.收集死锁信息:

  • 利用命令 SHOW ENGINE INNODB STATUS查看死锁原因。
  • 调试阶段开启 innodb_print_all_deadlocks,收集所有死锁日志。

2.减少死锁:

  • 使用事务,不使用 lock tables 。
  • 保证没有长事务。
  • 操作完之后立即提交事务,特别是在交互式命令行中。
  • 如果在用 (SELECT … FOR UPDATE or SELECT … LOCK IN SHARE
    MODE),尝试降低隔离级别。
  • 修改多个表或者多个行的时候,将修改的顺序保持一致。
  • 创建索引,可以使创建的锁更少。
  • 最好不要用 (SELECT … FOR UPDATE or SELECT … LOCK IN SHARE MODE)。
  • 如果上述都无法解决问题,那么尝试使用 lock tables t1, t2, t3 锁多张表

mysql如何处理死锁

可以通过以下三个语句来查询被打开的表,正在执行的任务列表和开启的事务

show OPEN TABLES where In_use > 0;
show processlist; -- kill杀死进程id(id列)
SELECT * FROM INFORMATION_SCHEMA.INNODB_TRX;

– kill杀死进程id(trx_mysql_thread_id列)

参考:点击这里

mysql 乐观锁和悲观锁

数据库扣减库存的时候 利用乐观锁解决

update 库存表 set 库存=库存-购买数量 where 库存id=? and 库存>=购买数量

悲观锁
select * from 库存表 where 库存id=? for update
事务提交释放锁

按照锁的级别:
共享锁:

SELECT * FROM entrepot WHERE id=1 LOCK IN SHARE MODE ;

排它锁

select …for update

意向锁
间隙锁

锁的粒度:

行级锁:

UPDATE entrepot SET price = price+500 WHERE name="aa";  - --  where条件加上索引  为行级锁

表级锁:

UPDATE entrepot SET price = price+500 WHERE name="aa"; -- where条件不加索引  为表级锁

页面锁:

  • 开销和加锁时间界于表锁和行锁之间;会出现死锁;锁定粒度界于表锁和行锁之间,并发度一般(不常用)

参考资料:点击这里

数据库三大范式

参考地址:点击这里

欢迎交流沟通

求一键三连,谢谢!

Mysql考试整理 mysql整理 MySQL_Major_test 1、Which one of the following keyword is used if a sub-query is likely to return a list of values and you need to match a column value with any of the values in this list to obtain the final result? 如果子查询可能返回值列表,并且您需要将列值与该列表中的任何值进行匹 阅读详情

相关推荐

MySQL定期整理磁盘碎片

通过本博客,我们深入探讨了为什么需要定期整理MySQL磁盘碎片,以及如何进行这一操作。合理使用这些方法可以有效提升数据库性能,确保系统长时间稳定运行。希望这些信息对读者在实际应用中有所帮助。在下一篇博客中,我们将继续探讨MySQL数据库的其他方面,敬请期待!

私聊前往站内信:https://i.youkuaiyun.com/#/msg/chat/weixin_44976692 3万+

一文搞懂MySQL

MySQL有这一篇就够了

weixin_48961004的博客 1444

MySQL标准文实例

sql文

万文深入详解MySql

Innodb事务实现方式:MVCC有关的字段:提交更新的时候,判断数据库表对应记录的当前版本信息与第一次取出来的version值进行比对,如果数据库表当前版本号与第一次取出来的version值相等,则予以更新,否则认为是过期数据,返回更新失败。b+树在存储联合索引(A,B,C)时,非叶子节点仅仅是对第一个关键字段A的索引,叶子节点存储着kv的结构,key存储的是三个关键字A、B、C的数据,且按照A-B-C的顺序进行排序。页分裂发生在update和insert操作中,会造成页的在物理层面的存储是乱序的。

JJTX00的博客 617

优惠券管理

(请设计一个优惠券兑换码生成方案,可以支持20亿以上的唯一兑换码,兑换码长度不超过10,只能包含字母数字,并且要保证生成和校验算法的高效)最后把签名值的后14位、新鲜值(4位)、自增序列(32位)拼接,得到一个50位二进制数,然后与一个较大的质数做异或运算加以混淆,再基于Base32或Base64转码,即可的对兑换码。现在,就剩下防止爆刷了。自增id从1增加到Integer的最大值,可以达到40亿以上个数字,而占用的字节仅仅4个字节,也就是32个bit位,距离50个bit位的限制还有很大的剩余,符合要求!

qq_36312661的博客 2204

动态对抗Zygisk-IL2CppDumper:Unity游戏安全新策略

本文深入探讨了对抗Zygisk-IL2CppDumper攻击的Unity游戏安全新策略。通过实时内存监控、动态混淆技术和异常行为检测体系,有效防止关键代码被动态提取。文章详细介绍了内存指纹系统、运行时混淆方案和五维特征模型等实用防御手段,帮助开发者提升游戏安全性。

weixin_29325955的博客 305

MySQL 史上最全文档之基础篇

MySQL 基础篇

m0_59119089的博客 1314

PCIe中ACS知识小记

虚拟机内部的访问数据显而易见是带的GPA地址。而目前几乎所有的PCIe 设备都带ACS control,所以它们可以单独assign给不同的VM,但是随之而来的就是即使两个GPU同时assign给同一个VM,由于ACS的存在,他们之间也不会有真正的物理层面的P2P访问。每一个TLP都自带一个address(寻址类TLP),同时每一个endpoint,PCIe switch都自带一段BIOS配置的地址空间范围,一旦这个TLP的address落入某个设备的地址范围,那么这个TLP就属于这个设备并消费。

Summer的博客 5077

MySQL - 一文了解MySQL的基础架构及各个组件的作用

MySQL可以基本划分为Server层和存储引擎层两部分:Server层包含了MySQL大多数核心功能,除了图中标注的连接器,查询缓存,分析器,优化器,执行器,还有所有的内置函数(日期,时间,数学和加密函数),所有跨存储引擎的功能都在这一层实现,如存储过程、触发器、视图等。存储引擎层负责MySQL中数据的存储和提取。和Linux下的各种文件系统一样,每个存储引擎都有自己的优势和劣势,各种存储引擎通过提供API和Server层对接,通过API屏蔽各种存储引擎之间的差异。常见的存储引擎有InnoDB、MyISA

迪曼奥特迦-博客 2274

基于航天宏图PIE-SAR软件的高分三号(GF-3)SAR影像的预处理

软件官网 航天宏图—国内领先的卫星运营与应用服务提供商(官网) 一、数据导入 数据导入-GF-3-根据模式选择 参数文件导入解压后GF-3数据的XML文件 通道自动填充 设置输出目录 确定 等待,加载图像、自动构建金字塔 二、复数数据转换 强度/幅度特征是SAR影像最主要的特征之一,基于SAR强度/幅度影像可以提取地物目标信息,因此需要将SAR复数数据转换为SAR强度/幅度数据。导入输入影像,设置参数类型,输出目录、命名、类型; 漫长的等待 三、多视 为提...

weixin_52127098的博客 9002

SpringBoot整合LangChain4j实现RAG检索实战详解

本文介绍了使用LangChain4j框架在Java生态中构建RAG(检索增强生成)应用的最佳实践。作为最接近Python LangChain的Java实现,LangChain4j提供了文档解析、向量化存储到检索增强的全套组件,并与SpringBoot深度集成。文章通过电商智能客服场景,详细演示了从零搭建RAG系统的完整流程:包括使用PostgreSQL+pgvector作为生产级向量数据库、文档加载与向量化处理、声明式AI服务实现以及查询压缩、结果重排等进阶优化技巧。同时对比了内存模式与生产级向量库的差异,

分享AI、区块链技术及应用,未来已来 432

一文入门mysql

一、基础知识 1.1 新建myemployees数据库 /* Navicat Premium Data Transfer Source Server : mysql0815 Source Server Type : MySQL Source Server Version : 50562 Source Host : localhost:3306 Source Schema : myemployees Target

Jak的博客 1435

为什么我的 Spark Executor / Yarn Container 只有一个vCore?

在很多集群里,在关闭了Spark的DynamicAllocation的前提下(避免自动申请空闲资源,干扰测试结果),都会观察到:提交Spark作业时,申请 1 个 driver + n 个 executor 会在Yarn上会对应创建 n+1 个 container,但是每个container只有一个vCore,通过--driver-cores和--executor-cores设定的vCore数都未奏效。有人会因此错误的认为Yarn上的一个vCore对应一个Spark的executor,这是非常错误的,正确的

Laurence的技术博客 916

MySQL知识点整理汇总

2020年暑假期间我开始接触 MySQL,通过阅读了几本相关书籍以及网上的一些教程,我逐渐了解了 MySQL 的入门级内容。在暑假期间学完 MySQL 的基础知识后,我便将其搁置在一旁,没有再进行进一步的探索。 如今,我想要再次拾起 MySQL 时,却发现其中的一些语法和规则已经差不多遗忘。对 MySQL 进阶的需求,再加上以前学过的每本书籍(或每个教程)的知识侧重点偶尔不同,因此我打算用这篇博客来记录我所学习到的 MySQL 重要知识点(包括基础知识与进阶内容)

weixin_45517168的博客 5702

【PINN高级教程】范式融合与前沿应用 第5讲:贝叶斯推断与生成式建模的深度融合

正规化流(Normalizing Flow, NF)通过一系列可逆变换把简单分布映射为复杂后验,从而获得更好的表达能力。算子学习保持映射的物理正确性。贝叶斯推断给出了自然的框架,但直接对高维函数空间做采样(如 MCMC)几乎不可行。1️⃣ 在自己的 PDE 上跑一遍完整的 Bayesian PINN 流模型。的学习机制深度融合,以在保持物理一致性的前提下,高效地从后验分布中采样。2️⃣ 将每个 θ 直接映射到 FNO 权重,得到不同解的采样。的后验 p(θ∣x,y)p(θ∣x,y) 进行近似。

u012133341的博客 474

时间序列预测 — 预测数据集(负荷、风电、光伏、销量等)

GEFCom2014 “负荷预测数据”为竞赛的公共数据集,GEFCom2014 的负荷预测轨迹为概率负荷预测。

几度春风里的博客 2万+

听说你在学习 MySQL,送你一份 MySQL 必备资源汇总

听说你在学习 MySQL,送你一份 MySQL 必备资源汇总。

Tony.Dong的专栏 2万+

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

MYSQL优化之碎片整理

当我们确定数据需要被清除掉时,那么这些数据就已经成了无用的数据,但是按照MySQL的处理方式,这些数据仍然会占用我们的磁盘空间,从而造成了极大的资源浪费。)的表进行了很多更改,不过被删除的数据记录仍然被保持在MySQL的链接清单中,因此数据存储文件的大小并不会随着数据的删除而减小。众所周知,MySQL中MyISAM表的数据是以文件形式存储的,我们可以在MySQL存储数据的文件夹中找到数据库test目录下的。原来,在MySQL中,如果我们删除了表中的大量数据,或者我们对含有可变长度文本数据类型(

doujingwei0825的博客 1558

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

mysql 格式整理_汇总整理MYSQL相关操作命令

汇总整理MYSQL相关操作命令更新时间:2009年04月15日 22:47:19 作者:本文汇总了一些常用的mysql命令。测试环境:mysql 5.0.45【注:可以在mysql中通过mysql> SELECT VERSION();来查看数据库版本】一、连接MYSQL。格式: mysql -h主机地址 -u用户名 -p用户密码1、连接到本机上的MYSQL。首先打开DOS窗口,然后进入目...

weixin_26833939的博客 180

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

SQL语法整理汇总

整理笔记,记录平时遇到的SQL语法,记录便于后期查阅,也希望能帮助其他朋友。 — 不定时更新,查找时使用 ctrl + f 搜索查询。 去掉左边空格 update tb set col=ltrim(col); 去掉右边空格 update tb set col=rtrim(col); 去掉两边空格 update tb set col=rtrim(col); ...

森林深处遇麋鹿z 1426

一文整理14道MySQL索引相关面试题

精心整理14道MySQL索引相关面试题(珍藏版) 如果仅仅是死记硬背MySQL索引相关面试题一定是相当枯燥的,不容易记却容易忘,这里循序渐进的讲解有关索引有关知识点,让大家在理解的基础上记住一些面试常问的点。 什么是索引? 索引的优缺点? 什么情况下需要建索引? 什么情况下不需要建索引? 索引有哪几种分类? 索引的数据结构有哪些? Hash索引和B+树索引的区别? 为什么B+树比B树更适合实现数据库索引? 聚集索引相对于非聚集索引的区别? 什么是回表查询? 什么是覆盖索引? 什么是最左匹配原则? 索引失效

后端元宇宙 1万+

mysql复制的汇总_mysql主主复制汇总整理

mysql主主复制汇总整理一、Mysql主主、主从复制主要思路:1、mysql复制实质:就是其他的MySQL数据库服务器将这个数据变更的二进制日志在本机上再执行一遍,因此非常重要的一点是mysql数据库中必须要开启二进制日志;2、Mysql主从复制:就是A为主数据库,B为从数据库,B将A中数据变更的二进制日志在它数据库中重新执行一遍;(B只会随着A改变,A不会随着B改变)3、Mysql主主复制:就...

weixin_36269724的博客 108

mysql对分组结果汇总

我整理的一些关于【MySQL,SQL】的项目学习资料(附讲解~~)和大家一起分享、学习一下:https://edu.51cto.com/surl=QDW3g3MySQL对分组结果汇总的浅析 在数据库管理系统中,MySQL是一种非常流行的关系型数据库。在数据分析和报告中,对数据进行分组并汇总是一个常见的需求。本文将通过示例...

weixin_40915085的博客 298

mysql 列汇总 按要求

我整理的一些关于【MySQL,SQL】的项目学习资料(附讲解~~)和大家一起分享、学习一下:https://edu.51cto.com/surl=QDW3g3MySQL 列汇总实现指南 在数据管理和分析的过程中,时常需要对数据库中的某一列进行汇总统计。作为一名刚入行的小白,或许你会对如何实现这个功能感到困惑。本文将通过一...

weixin_40836486的博客 170

mysql的字符集和整理是怎么一回事

在MySQL数据库中,特别是创建表的时候,因为经常使用集成工具来创建,总是对一个词特别困惑,整理(collation),字符集很容易理解,就是数据库中的数据要用什么编码格式进行编码,那整理呢?今天查了一下MySQL的开发文档,文档中对这个东西做了一个很有意思的描述,我把大概意思表述一下:什么是整理假如我们有一个字符的集合和对应的编码集合(因为计算机只认识数字,所以只能识别编码),集合如下: A->

中华胡杨的专栏 1539

Mysql文章大汇总,一文全搞定!!!

【大长文】7大领域,50道经典题目,助你彻底搞定MySQL面试!MySQL:数据库优化一览MySQL优化的14条建议Mysql性能优化实践一次MySQL 千万级大表的优化过程开发人员必备...

田维常 1119
上一篇: redis
下一篇: 面经之MyBatis
Carl God
博客等级 码龄7年 1908粉丝 48原创
评论 10
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Carl God

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值