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 条件;
问答推荐
- MySQL 一千万的数据量如何一秒内实现模糊搜索?
- MySQL 语句求助?
- MySQL 如何分组统计失败率?
- MySQL 生产环境数据表 10 亿,不停服,想把自增 id int 改成 bigint 有什么好的办法吗?
- 单列索引建立的顺序 会不会影响查询速度?
- MySQL 数据表新增一行记录,会不会自动按主键自动排序插入,还是会排在最后?
- 用于解决树形结构存储的闭包表,凭什么能快速获取某个节点的祖先节点/父节点/子节点?
- MySQL 删除数据的时候,会不会走索引?
- MySQL 商品销售情况统计查询特别慢,如何优化呢?
- MySQL 如何仅返回外表最新记录符合特地条件的内表记录?
# SegmentFault 技术周刊 #
「技术周刊」是社区特别推出的技术内容系列,一周一主题。
每周二更新,欢迎「关注」。大家也可以在评论处留言自己感兴趣的主题,推荐主题相关的优秀文章。
如有问题可以添加小姐姐微信~
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。