头图

SegmentFault 思否技术周刊 Vol.70 — 深入 MySQL 实战

MySQL 是一种关联数据库管理系统,关联数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内。这样就增加了速度并提高了灵活性。

MySQL 的 SQL “结构化查询语言”,SQL 是用于访问数据库的最常用标准化语言。

MySQL 软件采用了 GPL( GNU 通用公共许可证),由于其体积小、速度快、总体拥有成本低,尤其是开放源码这一特点,许多中小型网站为了降低网站总体拥有成本而选择了 MySQL 作为网站数据库。

本期技术周刊一起了解下 MySQL ,欢迎大家阅读 ~

文章推荐

《10 分钟教你写一个数据库》作者:艾小仙

今天教大家借助一款框架快速实现一个数据库,这个框架就是 Calcite,下面会带大家通过两个例子快速教会大家怎么实现,一个是可以通过 SQL 语句的方式可以直接查询文件内容,第二个是模拟 Mysql 查询功能,以及最后告诉大家怎么实现 SQL 查询 Kafka 数据。

《学习 MySQL 必须掌握的 13 个关键字,你 get 了吗?》作者:Java 架构师

三范式:

  • 第一范式:每个表的每一列都要保持它的原子性,也就是表的每一列是不可分割的;
  • 第二范式:在满足第一范式的基础上,每个表都要保持唯一性,也就是表的非主键字段完全依赖于主键字段;
  • 第三范式:在满足第一范式和第二范式的基础上,表中不能产生传递关系,要消除表中的冗余性;

《Mysql 数据库的批量插入或更新(Upsert)》作者:songofhawk

这个问题已经困扰我一段时间了,对于大量数据的插入或更新,批量操作肯定比每条记录调用一次快得多,新数据可以用 insert 批量插入,老数据可以用 replace into 批量更新。但如果不知道数据是否存在(是否有唯一 key 和数据库中已有记录重复)想在一批数据库中,插入新记录,更新老记录怎么办?

之前甚至想过封装一个函数,先用 select ... in 批量查询,然后分两组插入和更新,但一方面通用性不佳,另一方面这不是一个原子操作,对于并发的情况,有可能查询的时候记录不存在,插入的时候就已经存在了。

仔细 google 了一下,才发现这种“存在 update,不存在 insert ”的动作,有个专有名词,叫做“upsert”,相当形象。解决方案呢,不同数据库各有自己的解决方案和方言,Mysql 叫做 on duplicate key update,PostgreSql 中叫做 on confict do update。

《Mysql 45 讲关键知识》 作者:疯狂小兵

是因为 Mysql 更新数据只写到 redo 的 log 里,达到阈值后会刷脏页,占用 CPU 资源。脏页是指内存页数据和磁盘页数据不一致的情况。

发生场景

  • redolog 写满到阈值后,需将对应的内存页数据刷到磁盘上。 需要尽量避免,否则所有更新操作都会被 hang 主
  • 内存不足,刷脏页到磁盘上。常态,最需要关心的。
  • 资源空闲时,刷页。也会时不时的刷下脏页。资源空闲期刷脏页,系统不会有压力。
  • Mysql 正常关闭的时候,刷脏页到磁盘。关闭时刷脏页,正常操作,也不会关心性能。

影响性能的几种情况

  • 一次刷脏页太多。
  • 日志写满了,更新全部堵塞住。

《为什么说 MySQL 单表行数不要超过 2000w ?》作者:码猿技术专栏

作为在后端圈开车的多年老司机,是不是经常听到过,“mysql 单表最好不要超过 2000w”,“单表超过 2000w 就要考虑数据迁移了”,“你这个表数据都马上要到 2000w 了,难怪查询速度慢”

这些名言民语就和 “群里只讨论技术,不开车,开车速度不要超过 120 码,否则自动踢群”,只听过,没试过,哈哈。

下面我们就把车速踩到底,干到 180 码试试…….

《我操作 MySQL 的惊险一幕》作者:god23bin

情况:漏了某一个字段 X,需要将 A 表的这个字段列值更新到 B 表

条件:A 中的 id 字段的值等于 B表中的 id 字段的值 且 A 中的 name 字段的值等于 B 中 name 字段的值(条件为什么这样写?)。

条件这样写主要是因为 表和表之间的关联关系 可能有多个字段,此处只选二个字段,多个依此类推。

操作:

  • 一张表的数据插入到另一张表,可以这样写:
INSERT INTO 目标表(字段1, 字段2, ...) SELECT 字段1, 字段2, ... FROM 来源表 WHERE 条件;

问答推荐


# SegmentFault 技术周刊 #

「技术周刊」是社区特别推出的技术内容系列,一周一主题。

每周二更新,欢迎「关注」。大家也可以在评论处留言自己感兴趣的主题,推荐主题相关的优秀文章。

如有问题可以添加小姐姐微信~

image.png


SegmentFault_社区周刊
主题技术周刊,每周分享新鲜有趣的技术干货。
avatar
Beverly
SegmentFault 思否社区打工人

怂人面前全是坑,努力填坑 。

851 声望
2.1k 粉丝
0 条评论
推荐阅读
SegmentFault 思否技术周刊 Vol.80 — 玩转新时代前端构建工具
Vite 提供了一套原生 ESM 的 HMR API。 具有 HMR 功能的框架可以利用该 API 提供即时、准确的更新,而无需重新加载页面或清除应用程序状态。Vite 内置了 HMR 到 Vue.js 单文件组件(SFC)和 React Fast Refresh 中。

Beverly5阅读 1.3k

封面图
万字长文~vue+express+mysql带你彻底搞懂项目中的权限控制(附所有源码)
所谓的权限,其实指的就是:用户是否能看到,以及是否允许其对数据进行增删改查的操作,因为现在开发项目的主流方式是前后端分离,所以整个项目的权限是后端权限控制搭配前端权限控制共同实现的

水冗水孚11阅读 1.5k

花了几个月时间把 MySQL 重新巩固了一遍,梳理了一篇几万字 “超硬核” 的保姆式学习教程!(持续更新中~)
MySQL 是最流行的关系型数据库管理系统,在 WEB 应用方面 MySQL 是最好的 RDBMS(Relational Database Management System:关系数据库管理系统)应用软件之一。

民工哥11阅读 1k

封面图
SegmentFault 思否技术周刊 Vol.80 — 玩转新时代前端构建工具
Vite 提供了一套原生 ESM 的 HMR API。 具有 HMR 功能的框架可以利用该 API 提供即时、准确的更新,而无需重新加载页面或清除应用程序状态。Vite 内置了 HMR 到 Vue.js 单文件组件(SFC)和 React Fast Refresh 中。

Beverly5阅读 1.3k

封面图
一次偶然机会发现的MySQL“负优化”
今天要讲的这件事和上述的两个sql有关,是数年前遇到的一个关于MySQL查询性能的问题。主要是最近刷到了一些关于MySQL查询性能的文章,大部分文章中讲到的都只是一些常见的索引失效场合,于是我回想起了当初被那个...

骑牛上青山8阅读 2.2k评论 2

SegmentFault 思否技术周刊 Vol.76 — 破解 Javascript 玩法
维基百科:在计算机科学中,闭包(英语:Closure),又称词法闭包(Lexical Closure)或函数闭包(function closures),是在支持头等函数的编程语言中实现词法绑定的一种技术。MDN: 闭包(closure)是一个函数以...

Beverly4阅读 1.6k

封面图
SegmentFault 思否技术周刊 Vol.78 — Git 必看技术补给
Git 的诞生是一个非常有趣的故事。1991年 Linus 开源了 Linux 内核,无数 Linux 爱好者在世界各地为 Linux 编写代码,那么问题来了,这些代码该如何管理呢?起初 Linus 使用 BitKeeper(BitMover 公司的版本控制软...

Beverly3阅读 2k

封面图
avatar
Beverly
SegmentFault 思否社区打工人

怂人面前全是坑,努力填坑 。

851 声望
2.1k 粉丝
宣传栏