MySQL
文章平均质量分 86
Ch.yang
try{ coding } catch { bug }
展开
-
【MySQL】什么是意向锁 IS IX 及值得学习的思想
之前看 MySQL 都刻意忽略掉了 IS 和 IX 锁,今天看 《MySQL 是怎样运行的》,把意向锁讲的很通透,本篇博文提炼一下思想。I:Intention Lock(意向锁)S:SharedX: Exclusive。原创 2023-02-26 17:21:11 · 1108 阅读 · 0 评论 -
【高并发基础】理解 MVCC 及提炼实现思想
MVCC 在 MySQL、Oracle、PostgreSQL 都有应用,用于实现事务的隔离特性。现在结合 《MySQL是怎样运行的》的内容理解、归纳、整理下MVCC的实现及思想。Multiversion Concurrency Control 对版本并发控制。对于同一行数据,会根据不同事务的DML操作参生不同的版本,让不同事务各自维护自己能看到的版本从而做到事务隔离。每次操作数据库都会生成日志,那么就可以把同一条记录的多次操作记录按时间顺序链接起来。按事务开启的时间顺序,为事务颁发一个Id,从而维护“版原创 2022-12-04 18:44:25 · 605 阅读 · 0 评论 -
【MySQL】官网学习 order by 优化
尽可能让查询优化器选择仅走索引就能完成。如果不能通过索引能完成排序,则会使用到文件排序(filesort) ,如果文件大小合适,可以进行内存级别的filesort。数据量大到一定级别,内存级别的 filesort 不够用,需要磁盘配合进行内存交换,这种排序的速度也是很慢的,可以重点优化。最差的情况下是连文件排序(filesort)都不使用,是优化的重点对象。order by 优化。原创 2022-10-23 19:02:51 · 528 阅读 · 0 评论 -
【MySQL】官网学习 order by limit 中的乱序问题
对于同一句sql语句:order by … limit …,可能会出现不同的返回结果。通过官网能了解到,至少在5.7.32版本中这是存在的,需要我们编写正确的sql语句避免返回结果的乱序问题。索引的顺序特性文件排序 (filesort)排序的稳定性简单来说,排序的稳定可以这么表达:cheng[age: 18, class: A],han[age: 18, class: A] 固定这个先后组合且视为已按age排序在不同的数据集中都保持这个先后组合,即。原创 2022-10-23 16:35:11 · 1188 阅读 · 0 评论 -
【java_web】idea中spring boot 配置 mysql5数据库
PS:如果系统已经存在其他数据库服务,则服务名需要设置, 因为此前安装了8的环境这里设置为mysql5。新环境不用指定服务名,默认为mysql。复制目录E:\mysql_5.7.25\bin加入系统环境变量path内。再修改为自己的号码 (5.7.38需要加EXPIRE NEVER;原创 2019-03-10 14:52:41 · 1780 阅读 · 0 评论 -
【高并发基础】MySQL索引优化
本文整理自MySQL官方网站,官网的连接比较琐碎。防止反复多开页面,这边记录一些重点。Most MySQL indexes (PRIMARY KEY, UNIQUE, INDEX, and FULLTEXT) are stored in B-trees. Exceptions: Indexes on spatial data types use R-trees; MEMORY tables also support hash indexes; InnoDB uses inverted lists for F原创 2022-06-26 19:12:54 · 340 阅读 · 0 评论 -
【高并发基础】Spring 事务传播级别及造成死锁的隐患分析
本项目聚焦高并发的基础知识,至底向上得研究:github 仓库 (分支 master / isolation / propagation / multithreading)理念:事务传播行为官网描述用于区分声明式事务catch到异常由框架回滚,本文的“回滚”用到编程式事务的API 支持主动回滚。编程式事务官网描述讨论的模型是 调用方(外层) -> 被调用方(内层)默认传播行为, 确保当前方法一定处于事务保护中用于减少事务的粒度,如果不是关键的业务逻辑或是运行出错的逻辑,可以用 声明与调用方事务隔离。原创 2022-06-26 13:12:25 · 2097 阅读 · 0 评论 -
【高并发基础】MySQL 不同事务隔离级别下的并发隐患及解决方案
本项目聚焦高并发的基础知识,至底向上得研究:github 仓库 (分支 master / isolation / propagation / multithreading)理念:禁用了gap锁,减少了锁的作用范围,即减少了死锁风险使用了"半一致读"降低了锁等待,即减少了死锁风险,也提高了读效率项目isolation分支 :3.1.2 RC 解决不可重复读,使用 加锁项目isolation分支 :项目isolation分支 :3.2.1 解决幻读RC 禁用了GAP锁(外键约束除外)理论上是原创 2022-06-25 20:05:08 · 1033 阅读 · 0 评论 -
【MySQL】官网文档学习之查询语句sql注意事项
MySQL5.7 SELECT 文档。查询语句可禁用group by的默认排序(减少排序开销)在selete中使用order by group by排序的时候不要忽略 max_sort_length由于as操作在where执行之后,同样的需求无法用一下语句实现where 本身于聚合函数无关,所以也无法用聚合函数作为语句having 不跟 group by 一起用,可以执行,此时若having后不使用聚合函数,语义与where一致,建议改成where.having原创 2022-06-11 18:10:05 · 252 阅读 · 0 评论 -
【MySQL】关键字及运算符官方文档及笔记
前言写SQL题经常用,遇到的在这里记录一下1. join on 和 where 的条件区别MySQL5.7 join 相关文档1.1 用 left join 取代 right joinRIGHT JOIN works analogously to LEFT JOIN. To keep code portable across databases, it is recommended that you use LEFT JOIN instead of RIGHT JOIN.right join原创 2022-02-03 20:29:12 · 1327 阅读 · 0 评论 -
【MySQL】count(表达式)和sum(表达式)在计数上的区别
需求统计所有没买过ipone 但是买过 S8的买家id。题解是分组进行的,所以只关心having后的表达式sum(表达式)select b.buyer_id from Product a join Sales b on a.product_id = b.product_idgroup by b.buyer_id having sum(IF(a.product_name = 'iphone',1,0)) = 0 and sum(IF(a.product_name = 'S8',1,0)) >原创 2022-01-19 21:49:36 · 927 阅读 · 0 评论 -
【MySQL】truncate、delete、drop的区别
Truncate的特点逻辑上truncate table和delete from table_name;相似,但是过程是先drop table,然后在re-create table,如果要清空一个大表的所有数据行,truncate比delete高效;Truncate是一个DDL操作,一旦执行会隐式提交,这就说明truncate无法rollback,所以执行之前需谨慎;如果表被锁住,t...转载 2020-03-13 17:27:49 · 208 阅读 · 1 评论 -
【MySQL】不同时区如何解析timestamp, 较datetime、date、time的区别
时间戳的定义时间戳是指格林威治时间1970年01月01日00时00分00秒起至现在的总秒数。通俗的讲, 时间戳是一份能够表示一份数据在一个特定时间点已经存在的完整的可验证的数据。系统时间2019-11-29 10:00:15带时区的系统时间2019-11-29 10:00:15 UTC+8:00系统时间的格林威治时间 —— 时间戳(Timestamp)2019-1...原创 2019-11-29 15:59:30 · 1334 阅读 · 0 评论 -
【MySQL】MyISAM 与 InnoDB 关于锁方面的区别
表级锁、行级锁MyISAM 默认是表级锁,不支持行级锁。 不支持事务InnoDB 默认是行级锁,也支持表级锁。支持事务,并支持自动提交。所以 InnoDB 在锁的粒度上更细一点。读锁和写锁MyISAMselect、insert 、delete、updateselect 默认上读锁,其他上写锁。select 也可以上 写锁select * from table for u...原创 2019-07-28 23:58:42 · 895 阅读 · 0 评论 -
【MySQL】InnoDB 当前读 与 快照读
当前读和快照读原创 2019-07-29 13:08:49 · 1269 阅读 · 0 评论 -
【MySQL】InnoDB 如何避免脏读和不可重复读
当前读和快照读的区别MySQL 的 InnoDB 会维护一系列不暴露给用户的隐藏字段,其中有3个用于实现快照读(非阻塞读)DB_TRX_ID最新一次修改本行记录的操作ID同一个事务,同一个操作要加以区分,这里指操作DB_ROLL_PTR回滚指针,存储的地址配合undo logDB_ROW_IDInnoDB 无论有没有主键,都会通过该字段唯一标识一条记录READ-COMMITTED一个事务原创 2019-07-29 13:46:20 · 4580 阅读 · 4 评论 -
【MySQL】InnoDB 如何防止幻读
名词解释加 next - key 锁next - key 锁 = 行锁 + gap锁加 行锁InnoDB 行锁的时机加 gap锁gap锁,又叫间隙锁,如果 id = 1,3,4,5,7若对区间(1,5)加gap锁,可以明确7未被锁住。1和5这个边际需要参考主键顺序InnoDB 的主键策略该引擎的记录强调顺序性,若建表不使用主键或者唯一键,则自动生成一个隐藏的主键保...原创 2019-07-29 20:08:21 · 1643 阅读 · 0 评论 -
【工具】 脚本入门 -- Windows 使用 shell 脚本修改 MySQL 数据库名
问题描述想修改数据库名,发现不能使用 rename 操作。1. 官方不支持 rename database 的操作。2. 可以使用 shell 脚本实现安全高效得改名3. windows 平台通过安装 git for windows 可以解析 shell 脚本4. Innodb 比 MyISAM 的改名步骤更为复杂尝试解决直接修改磁盘文件命名将data目录中的db_name目录...原创 2019-09-19 18:12:32 · 386 阅读 · 0 评论 -
【MySQL】伪rank函数的需求实现,group by 的使用习惯
题目来源:https://blog.csdn.net/fashion2014/article/details/78826299目标MySql 没有rank函数,可以使用子查询 + 自连接实现rank逻辑题目DDL-- 成绩表 持有学生表和课程表的主键CREATE TABLE `Score`( `s_id` VARCHAR(20), `c_id` VARCHAR(20), `s_s...原创 2019-09-28 16:26:52 · 570 阅读 · 0 评论 -
【MySQL】伪rank函数的需求实现,使用MySQL变量
目标MySql 没有rank函数,可以使用变量完成rank逻辑题目ddl-- 成绩表 持有学生表和课程表的主键CREATE TABLE `Score`( `s_id` VARCHAR(20), `c_id` VARCHAR(20), `s_score` INT(3), PRIMARY KEY(`s_id`,`c_id`));-- 学生表CREATE TABLE `Stude...原创 2019-10-07 16:52:18 · 161 阅读 · 0 评论