MySQL
文章平均质量分 92
STRANG-P
这个作者很懒,什么都没留下…
展开
-
MySQL 之多版本并发控制 MVCC
在每一次进行普通 select 操作前,都会生成一个 ReadView只在第一次进行普通 select 操作前生成一个 ReadView,之后的查询操作都重复使用这个 ReadView 就好了。MVCC(多版本并发控制)解决的问题① 读写之间阻塞的问题。通过 MVCC 可以让读写相互不阻塞,即读不阻塞写,写不阻塞读,可以提升事务并发处理能力。② 降低了死锁的概率。因为 MVCC 采用了乐观锁的方式,读取数据时并不需要加锁,对于写操作,也只锁定必要的行。③ 解决快照读的问题。原创 2023-11-20 11:48:26 · 489 阅读 · 0 评论 -
多维度梳理 MySQL 锁
在数据库中,除传统的计算资源(如 CPU、RAM、I/O等)的争用以外,数据也是一种供许多用户共享的资源。为保证数据的一致性,需要对并发操作进行控制,因此产生了锁。同时。锁冲突也是影响数据库并发访问性能的一个重要因素。所以锁对数据库非常重要,且复杂。并发事务访问同一记录的情况,大致分为:读-读、写-写、读-写。原创 2023-11-15 15:48:58 · 273 阅读 · 0 评论 -
并发事务下,不同隔离级别可能出现的问题
对于MySQL而言,幻读是事务在插入事先检测不存在的记录时,发现这条数据已经存在了,无法支撑后续的插入操作。举例:对于两个事务A、B,事务A读取了一个字段,然后事务B 更新了该字段,之后事务A再次读取同一个字段,值就不同了,这种情况就是不可重复读。,事务A 在读到一条数据后,此时事务B对该数据进行修改并提交,那么事务A再读该数据,读到的还是原来的内容。,在该隔离级别,所有事务都可以看到其他未提交事务的执行结果。以下示例,事务A已经提交成功,但是事务B回滚了,最终 no=1 的数据没有任何变化。原创 2023-11-13 08:31:53 · 348 阅读 · 0 评论 -
理解MySQL的日志 redo、undo、binlog
在 InnoDB 中,事务中的 delete 操作实际上并不是真正的删除掉数据行,而是一种 Delete Mark 操作,在记录上标识 Delete_Bit,而不删除记录,真正的删除是后台 purge线程去完成。比如,一个事务在修改当前一个页中某几条记录,同时还有其他事务在对同一个页中另几条记录进行修改,所以为保证不影响其他事务正在进行的工作,不能将一个页回滚到事务开始的样子。在执行事务的过程中,每执行一条语句,可能会产生多条redo日志,且这些redo日志是按照产生的顺序写入磁盘的,也就是。原创 2023-11-09 21:15:54 · 491 阅读 · 0 评论 -
MySQL 优化思路篇
show profile 是MySQL 提供用来分析当前会话中的SQL做了什么、执行的资源消耗情况的工具,用于SQL调优优化。参数定义【慢】的阈值,帮助我们定位执行慢的SQL语句,收集慢查询语句,再通过分析工具对慢查询日志进行分析。如果再 show profile 诊断结果中出现了以上四种结果中的一条,则SQL语句需要优化。由于开启慢查询日志,会或多或少带来一定的性能影响,周期性的波动,可能是双十一,促销活动等,可以通过。值的 SQL,会被记录到慢查询日志中。,并保存最近15次的运行结果。原创 2023-11-02 16:41:59 · 282 阅读 · 1 评论 -
从 Hash索引、二叉树、B-Tree 与 B+Tree 对比看索引结构选择
数据结构可以说是程序员常用,但大部分人不知其所以然的知识点,本文将对Hash、二叉搜索树、平衡二叉树、B-Tree、B+Tree几种数据做一下梳理和总结。原创 2023-10-30 17:11:09 · 341 阅读 · 0 评论 -
从InnoDB索引的数据结构,去理解索引
该篇我们都是基于 InnoDB 存储引擎的大前提下讨论的,如文中未明确指出存储引擎,一律说的是 InnoDB.要知道. 按照物理实现方式,可以将索引划分为聚簇索引和非聚簇索引(也称为二级索引辅助索引。原创 2023-10-29 15:11:07 · 567 阅读 · 0 评论 -
搞懂 MySQL 的架构和执行流程
学习MySQL需要知其然,知其所以然。在建立缓存、优化查询前,必须知道MySQL的架构,和SQL的执行流程相关知识。原创 2023-10-29 08:42:36 · 365 阅读 · 0 评论 -
Mysql 的索引分类和设计原则
Mysql 索引1、MySql 索引1.1、普通索引1.2、唯一索引1.3、组合索引1.3.1、起作用索引1.3.1、不起作用索引1.4、全文索引1.5、空间索引2、索引分析2.1 索引优劣势1、MySql 索引 1.1、普通索引 普通索引是最基本的索引类型,没有唯一性之类的限制,其作用只是加快对数据的访问速度,索引值可出现多次。。 // 创建普通索引脚本// 1、新增时创建索引CREATE INDEX indexName ON table_name (co原创 2020-09-03 17:32:28 · 791 阅读 · 1 评论 -
MySQLTransactionRollbackException: Lock wait timeout exceeded; try restarting transaction
com.mysql.jdbc.exceptions.jdbc4.MySQLTransactionRollbackException: Lock wait timeout exceeded; try restarting transactio 问题解决1、问题描述2、重现问题2.1 模拟锁表2.2 调用http接口修改user表数据3、解决方法第一种:杀掉 Thread Id(临时)第二种:更改数据...原创 2019-12-12 17:51:50 · 4766 阅读 · 0 评论 -
Mysql 动态实现 行转列 分析
说明 :1、使用光标(游标),循环动态拼接 sql。2、存储过程动态行转列。3、用于示例,使用光标动态赋值,循环拼接。 表结构: 存储过程脚本 : DELIMITER //CREATE PROCEDURE getAnnounceInfo(IN stuName VARCHAR(100)) BEGIN # 声明局部变量 DECLAR...原创 2019-07-23 14:25:41 · 670 阅读 · 0 评论 -
MySQL 替换 exec sp_executesql 函数
MySQL存储过程执行动态 SQL,并获取结果1、说明2、示例1、说明 在MySQL 存储过程中,时常要动态拼接并执行 sql ,并将执行的sql结果作为条件等。 最近在做 SQL Serve...原创 2019-07-25 20:33:28 · 2125 阅读 · 0 评论 -
函数MySQL排序,并添加序列
MySQL排序,并添加序列说明两种实现说明 SQL Server 数据库函数 row_number() over (order by ……) 函数,使用MySQL替换。 MySQL排序,并添加序列 两种实现 ############### row_number() over (order by ……) 函数实现 ##########...原创 2019-07-24 11:55:50 · 2933 阅读 · 1 评论 -
MySQL 查询结果 UTF8 踩坑经历
MySQL 查询结果转 UTF8踩坑过程解决办法踩坑过程 表结构字符集配置 :查询结果 :采用上面的结果集,作子查询:出现乱码解决办法 使用 convert (str using utf8)函数转换,str 是需要转换的值或 :...原创 2019-07-29 10:25:03 · 707 阅读 · 0 评论 -
MySQL 替换 ROW_NUMBER() OVER (PARTITION ……) 函数
实现分组后在组内排序的功能说明1、ROW_NUMBER() OVER (PARTITION ……)函数实现2、MySql 实现说明 SQL Server 数据库函数 ROW_NUMBER() OVER (PARTITION ……)函数,使用MySQL替换。 实现分组后在组内排序的功能。 1、ROW_NUMBER() OVER (PARTITION...原创 2019-07-23 20:31:47 · 8910 阅读 · 0 评论 -
SQL Server 与 MySQL 函数差异
SQL Server 与 MySQL 函数差异1、+ 与 concat()2、dateadd() 与 date_add()3、getdate() 与 now()4、cast() 函数5、charindex() 与 locate()6、len()/datalength() 与 char_length()7、convert() 与 date_format()8、isnull() 与 ifnull...原创 2019-07-18 17:35:55 · 1305 阅读 · 0 评论 -
Sql Server 的 for xml path ('') 函数与 Mysql 的 group_concat() 函数转换
Sql Server 的 for xml path 函数与 Mysql 的 group_concat 函数转换1、Sql Server 的 for xml path ('') 函数2、Mysql 的 group_concat() 函数1、Sql Server 的 for xml path (’’) 函数 测试用的表结构:测试用的表数据:for xml path (’’...原创 2019-07-18 16:26:36 · 1375 阅读 · 0 评论 -
MySQL字符串函数
MySQL字符串函数1、计算字符串字符数的函数、字符串长度的函数2、合并字符串函数3、替換字符串的函数4、字母大小写转换函数5、获取指定长度的字符串的函数6、填充字符串的函数7、删除空格的函数8、删除指定字符串的函数9、替换函数10、获取子串的函数(截取)1、计算字符串字符数的函数、字符串长度的函数CHAR_LENGTH(str) 返回值为字符串 str 所包含的字符个数。一个多字节字符算...原创 2019-06-27 11:18:35 · 626 阅读 · 0 评论 -
MySQL 数字函数
MySQL 数字函数1、求绝对值函数 ABS()2、求平方根函数 SQRT()3、求余函数 MOD(x,y)4、获取整数的函数 CEIL()、CEILING()、FLOOR()5、获取随机数的函数 RAND() 和 RAND(x)6、四舍五入函数 ROUND(x)、ROUND(x,y) 和 TRUNCATE(x,y)7、符号函数 SIGN(x)8、幂运算函数 POW(x,y)、POWER(x,y)...原创 2019-06-26 11:34:11 · 1892 阅读 · 0 评论