MySQL
文章平均质量分 70
MySQL
赵鹏翔
上海市东华大学在读研究生,大家共勉。
展开
-
Redis面试整理
1 redis 简介简单来说 redis 就是一个数据库,不过与传统数据库不同的是 redis 的数据是存在内存中的,所以读写速度非常快,因此 redis 被广泛应用于缓存方向。另外,redis 也经常用来做分布式锁。redis 提供了多种数据类型来支持不同的业务场景。除此之外,redis 支持事务 、持久化、LUA脚本、LRU驱动事件、多种集群方案。2 为什么要用 redis/为什么要用缓存主要从“高性能”和“高并发”这两点来看待这个问题高性能:假如用户第一次访问数据库中的某些数据。这个过程会比原创 2021-04-26 23:01:16 · 1110 阅读 · 2 评论 -
一条SQL语句执行得很慢的原因有哪些?
针对偶尔很慢的情况1、数据库在刷新脏页(flush)当我们要往数据库插入一条数据、或者要更新一条数据的时候,我们知道数据库会在内存中把对应字段的数据更新了,但是更新之后,这些更新的字段并不会马上同步持久化到磁盘中去,而是把这些更新的记录写入到 redo log 日记中去,等到空闲的时候,在通过 redo log 里的日记把最新的数据同步到磁盘中去。当内存数据页跟磁盘数据页内容不一致的时候,我们称这个内存页为“脏页”。内存数据写入到磁盘后,内存和磁盘上的数据页的内容就一致了,称为“干净页”。刷脏页原创 2021-04-26 18:59:16 · 403 阅读 · 1 评论 -
数据库命令规范
数据库命令规范•所有数据库对象名称必须使用小写字母并用下划线分割•所有数据库对象名称禁止使用 MySQL 保留关键字(如果表名中包含关键字查询时,需要将其用单引号括起来)•数据库对象的命名要能做到见名识意,并且最后不要超过 32 个字符•临时库表必须以 tmp_为前缀并以日期为后缀,备份表必须以 bak_为前缀并以日期 (时间戳) 为后缀•所有存储相同数据的列名和列类型必须一致(一般作为关联列,如果查询时关联列类型不一致会自动进行数据类型隐式转换,会造成列上的索引失效,导致查询效率降低)数据库基原创 2021-04-26 17:20:49 · 306 阅读 · 0 评论 -
一条SQL语句在MySQL中如何执行的
MySQL 基本架构概览请先了解InnoDB引擎•连接器: 身份认证和权限相关(登录 MySQL 的时候)。•查询缓存: 执行查询语句的时候,会先查询缓存(MySQL 8.0 版本后移除,因为这个功能不太实用)。•分析器: 没有命中缓存的话,SQL 语句就会经过分析器,分析器说白了就是要先看你的 SQL 语句要干嘛,再检查你的 SQL 语句语法是否正确。•优化器: 按照 MySQL 认为最优的方案去执行。•执行器: 执行语句,然后从存储引擎返回数据。MySQL 主要分为 Server原创 2021-04-25 23:46:08 · 336 阅读 · 2 评论 -
分库分表之后,id 主键如何处理?
分库分表之后,id 主键如何处理?因为要是分成多个表之后,每个表都是从 1 开始累加,这样是不对的,我们需要一个全局唯一的 id 来支持。生成全局 id 有下面这几种方式:UUID不适合作为主键,因为太长了,并且无序不可读,查询效率低。比较适合用于生成唯一的名字的标示比如文件的名字。数据库自增 id两台数据库分别设置不同步 ,生成不重复ID的策略来实现高可用。这种方式生成的 id 有序,但是需要独立部署数据库实例,成本高,还会有性能瓶颈。利用 redis 生成 id性能比较好,灵活方便,不依原创 2021-04-25 23:27:17 · 807 阅读 · 3 评论 -
什么是池化设计思想?什么是数据库连接池?为什么需要数据库连接池?
池化设计思想我们常用的如java线程池、jdbc连接池、redis连接池等就是这类设计的代表实现。这种设计会初始预设资源,解决的问题就是抵消每次获取资源的消耗,如创建线程的开销,获取远程连接的开销等。就好比你去食堂打饭,打饭的大妈会先把饭盛好几份放那里,你来了就直接拿着饭盒加菜即可,不用再临时又盛饭又打菜,效率就高了。除了初始化资源,池化设计还包括如下这些特征:池子的初始值、池子的活跃值、池子的最大值等,这些特征可以直接映射到java线程池和数据库连接池的成员属性中。什么是数据库连接池?为什么需要数据库原创 2021-04-25 23:24:10 · 740 阅读 · 0 评论 -
数据库事务
数据库事务事务是逻辑上的一组操作,要么都执行,要么都不执行。事务最经典也经常被拿出来说例子就是转账了。假如小明要给小红转账1000元,这个转账会涉及到两个关键操作就是:将小明的余额减少1000元,将小红的余额增加1000元。万一在这两个操作之间突然出现错误比如银行系统崩溃,导致小明余额减少而小红的余额没有增加,这样就不对了。事务就是保证这两个关键操作要么都成功,要么都要失败。事物的四大特性(ACID)1.原子性(Atomicity): 事务是最小的执行单位,不允许分割。事务的原子性确保动作要么全部原创 2021-04-25 23:04:27 · 403 阅读 · 0 评论 -
数据库索引
数据库的索引问题就是查找问题数据库索引,是数据库管理系统中一个排序的数据结构,以协助快速查询,更新数据库中表的数据.索引的实现通常使用B树和变种的B+树(mysql常用的索引就是B+树)除了数据之外,数据库系统还维护为满足特定查找算法的数据结构,这些数据结构以某种方式引用数据.这种数据结构就是索引创建索引的好处①通过创建索引,可以在查询的过程中,提高系统的性能②通过创建唯一性索引,可以保证数据库表中每一行数据的唯一性③在使用分组和排序子句进行数据检索时,可以减少查询中分组和排序的时间创建索引的原创 2021-03-31 18:28:37 · 94 阅读 · 1 评论 -
InnoDB整理
InnoDB存储引擎1.InnoDB是事务型数据库的首选引擎,支持事务安全表(ACID)2.InnoDB是mySQL默认的存储引擎,默认的隔离级别是RR,并且在RR的隔离级别下更近一步,通过多版本并发控制(MVCC)解决不可重复读问题,加上间隙锁(也就是并发控制)解决幻读问题。因此InnoDB的RR隔离级别其实实现了串行化级别的效果,而保留了比较好的并发性能。3.InnoDB支持行级锁。行级锁可以最大程度的支持并发,行级锁是由存储引擎层实现的。锁的主要作用是管理共享资源的并发访问,用于实现事务的隔离原创 2021-04-07 21:41:47 · 1269 阅读 · 3 评论 -
数据库 事务 隔离机制 整理
1.并发事务处理带来的问题相对于串行处理来说,并发事务处理能大大增加数据库资源的利用率,提高数据库系统的事务吞吐量,从而可以支持更多的用户。但并发事务处理也会带来一些问题,主要包括以下几种情况:脏读(Dirty Reads):一个事务读取到另一个事务尚未提交的数据不可重复读(Non-Repeatable Reads):一个事务在读取某些数据后的某个时间,在此读取以前读过的数据,却发现其读出的数据已经发生了改变或某些记录已经被删除了幻读 (Phantom Reads):一个事务按照相同的检索条件重新.转载 2021-04-08 18:37:37 · 129 阅读 · 0 评论 -
数据库六大范式 整理(图文)(2021)
数据库六大范式(关系型数据库)数据库需要满足一些规则(约定)来优化数据的设计和存储,这些规则就称为范式。关系数据库有六种范式:第一范式(1NF)、第二范式(2NF)、第三范式(3NF)、巴斯-科德范式(BCNF)、第四范式(4NF)和第五范式(5NF,又称完美范式)相互关系:满足5的一定满足前面的范式,以此类推。(子集)第一范式第一范式每一列不可再拆分(原子性)。在此基础上继续规范化,优化,解耦,既第二范式在第一范式的基础上所有列完全依赖于主键列如下图:借书证名称依赖于借书证号,并没有原创 2021-04-13 16:09:27 · 7518 阅读 · 0 评论 -
数据库面试----学生、老师、课程、选课表常用sql示例
数据库面试----学生、老师、课程、选课表常用sql示例请先看看六大范式详解1——建表(1)学生表 studentDROP TABLE IF EXISTS `student`;CREATE TABLE `student` ( `sid` int(11) DEFAULT NULL, `sname` varchar(20) DEFAULT NULL, `sage` int(11) DEFAULT NULL, `ssex` varchar(20) DEFAULT NULL) ENGIN原创 2021-04-13 21:26:21 · 2106 阅读 · 0 评论 -
非关系型数据库和关系型数据库区别
非关系型数据库性能较高(高并发,快)、价格较低、可扩展性更好(数据耦合性不高)关系型数据库除了与上述特点相反外,使用方便,易于复杂操作,支持事务原创 2021-04-15 17:12:15 · 184 阅读 · 0 评论 -
Redis事务与MySQL事务 整理
事务:Transaction本质是一组命令的集合,可以一次执行多个命令,所有命令都会序列化,按顺序地串行化执行而不会被其它命令插入,不许插队。将一组需要一起执行的命令放到multi和exec两个命令之间。multi命令代表事务开始,exec命令代表事务结束,它们之间的命令是原子顺序执行的。Redis事务的三个特性单独的隔离操作:事务中的所有命令都会序列化、按顺序地执行。事务在执行的过程中,不会被其他客户端发送来的命令请求所打断;没有隔离级别的概念:队列中的命令没有提交之前都不会实际的被执行,因为事务转载 2021-04-15 21:24:00 · 419 阅读 · 0 评论