
MySQL
K. Bob
多读书,多睡觉;少吃零食,多运动。
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
MySQL主从复制
**原理:**主数据库进行增删改操作后,相应操作记录的语句会记录到binlog日志文件中从数据库会请求主数据库的binlog日志文件,获取到新的操作语句,然后在自己的从数据库上自动执行相同的操作语句,进而实现主从的同步。主从复制过程:(1)Master开启bin-log功能,binlog日志文件用于记录数据库的增删改操作(2)需要开启三个线程,Master:I/O线程;Slave:I/O线程,SQL线程(3)Slave start;通过I/O线程连接Master,并且请求某个bin-log,po原创 2020-10-09 13:13:49 · 221 阅读 · 0 评论 -
MySQL存储底层原理
MySQL存储引擎InnoDB InnoDB 的存储文件有两个,后缀名分别是.frm和.idb,其中.frm是表的定义文件,而.idb是数据文件。InnoDB 中存在表锁和行锁,不过行锁是在命中索引的情况下才会起作用。InnoDB 支持事务,且支持四种隔离级别(读未提交、读已提交、可重复读、串行化),默认的为可重复读。Myisam Myisam 的存储文件有三个,后缀名分别是.frm、.MYD、.MYI,其中 .frm是表的定义文件,.MYD是数据文件,.MYI是索引文件。Myisam 只支持表原创 2020-10-03 21:49:19 · 3931 阅读 · 1 评论 -
基于数据库的分布式锁实现
一、基于数据库表 要实现分布式锁,最简单的方式可能就是直接创建一张锁表,然后通过操作该表中的数据来实现了。当要锁住某个方法或资源的时候,就在该表中增加一条记录,想要释放锁的时候就删除这条记录。创建这样一张数据库表:CREATE TABLE `methodLock` ( `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '主键', `method_name` varchar(64) NOT NULL DEFAULT '' COMMENT '锁定的方法名',原创 2020-10-03 13:43:18 · 505 阅读 · 0 评论 -
group by的原理
在Mysql 中,GROUP BY 的实现有三种方式:松散索引,紧凑索引,临时文件(文件排序)。其中有两种方式会利用现有的索引信息来完成 GROUP BY,另外一种为完全无法使用索引的场景下使用。1、使用松散(Loose)索引扫描实现 GROUP BY 松散索引扫描实现 GROUP BY实际上就是当 MySQL 完全利用索引扫描来实现 GROUP BY 的时候,并不需要扫描所有满足条件的索引键即可完成操作得出结果。索引中用于group的字段,没必要包含多列索引的全部字段。例如:有一个索引idx(c原创 2020-09-19 10:44:41 · 978 阅读 · 0 评论 -
SQL语句在MySQL中执行过程全解析
MySQL 基本架构概览下图是 MySQL 的一个简要架构图,可以很清晰地看到用户的 SQL 语句在 MySQL 内部是如何执行的。连接器:身份认证和权限相关(登录 MySQL 的时候)查询缓存:执行查询语句的时候,会先查询缓存分析器:没有命中缓存的话,SQL 语句就会经过分析器,分析器说白了就是要先看你的 SQL 语句要干嘛,再检查你的 SQL 语句语法是否正确优化器:按照 MySQL 认为最优的方案去执行执行器:执行语句,然后从存储引擎返回数据MySQL 主要分为 Server 层和原创 2020-08-02 22:38:57 · 392 阅读 · 0 评论 -
分库分表分区
目录分库分表的方式方法垂直拆分水平拆分水平分库扩展问题分库分表的方式方法 包括垂直切分和水平切分。单个库太大,要区分是因为表多而导致数据多,还是因为单张表里面的数据多。如果是因为表多而数据多,使用垂直切分,根据业务切分成不同的库。如果是因为单张表的数据量太大,这时要用水平切分,即把表的数据按某种规则切分成多张表,甚至多个库上的多张表。分库分表的顺序应该是先垂直分,后水平分。垂直拆分垂直分表 即“大表拆小表”,基于列字段进行的。一般是表中的字段较多,将不常用的, 数据较大,长度较长(比如tex原创 2020-07-29 21:05:34 · 472 阅读 · 0 评论 -
MySQL and So On
MySQL四种join【1】SQL四种joinINNER JOIN 关键字在表中存在至少一个匹配时返回行。LEFT JOIN 关键字从左表(table1)返回所有的行,即使右表(table2)中没有匹配。如果右表中没有匹配,则结果为 NULL。RIGHT JOIN 关键字从右表(table2)返回所有的行,即使左表(table1)中没有匹配。如果左表中没有匹配,则结果为 NULL。FULL OUTER JOIN 关键字只要左表(table1)和右表(table2)其中一个表中存在匹配,则返回原创 2020-07-26 16:24:54 · 552 阅读 · 0 评论 -
JDBC底层原理
MVC架构模式相当于一种设计方案,将客户的不同需求抽象成为抽象组件,并且能够描述这些抽象组件之间的通信和调用。MVC设计模式MVC设计模式与MVC框架的区别MVC设计模式 MVC模式(Model View Controller),也称为模型-视图-控制器模式。用一种业务逻辑、数据、界面显示分离的方法组织代码,将业务逻辑聚集到一个部件里面,在改进和个性化定制界面及用户交互的同时,不需要重新编写...原创 2019-07-09 15:33:23 · 1666 阅读 · 0 评论 -
explain
项目中经常会用到数据库连接池数据库连接池C3P0数据库连接池 池(Pool)技术可以明显优化服务器应用程序的性能,提高程序执行效率和降低系统资源开销。广义上的池包括数据库连接池、线程池、内存池、对象池等。池技术的优势是,可以消除对象创建所带来的延迟,从而提高系统的性能。对于共享资源,对应着资源池(Resource Pool)设计模式。该模式可以解决资源的频繁分配﹑释放所造成的问题。 数据...原创 2020-06-22 17:20:09 · 1139 阅读 · 0 评论 -
分布式事务:2PC/3PC
任何事务机制在实现时,都应该考虑事务的ACID特性,包括:本地事务、分布式事务。本地事务 大多数场景下,应用都只需要操作单一的数据库,这种情况下的事务称之为本地事务。本地事务的ACID特性是数据库直接提供支持。在JDBC编程中,通过java.sql.Connection对象来开启、关闭或者提交事务。代码如下所示:Connection conn = ... //获取数据库连接conn.setAutoCommit(false); //开启事务try{ //...执行增删改查sql con原创 2020-06-12 10:16:18 · 420 阅读 · 0 评论 -
MySQL高可用方案
目录基于共享存储的方案SAN基于磁盘复制的方案 DRBD基于主从复制(单点写)方案keepalived/heartbeatMHA基于ZooKeeper的高可用基于Cluster(多点写)方案基于中间件proxy的方案总结基于共享存储的方案SAN SAN(Storage Area Network)可以实现网络中不同服务器的数据共享,共享存储能够为数据库服务器和存储解耦。使用共享存储时,服务器能够正常挂载文件系统并操作,如果服务器挂了,备用服务器可以挂载相同的文件系统,执行需要的恢复操作,然后启动MySQ翻译 2020-05-29 16:34:43 · 731 阅读 · 0 评论 -
一条SQL语句执行得很慢的原因
需要分以下两种情况来讨论:1、大多数情况是正常的,只是偶尔会出现很慢的情况2、在数据量不变的情况下,这条SQL语句一直以来都执行的很慢针对偶尔很慢的情况数据库在刷新脏页 当要往数据库插入一条数据或者要更新一条数据的时候,数据库会在内存中把对应字段的数据更新了,但是更新之后,这些更新的字段并不会马上同步持久化到磁盘中去,而是把这些更新的记录写入到 redo log 日记中去,等到空闲的时候,在通过 redo log 里的日记把最新的数据同步到磁盘中去。 不过,redo log 里的容量是有限的转载 2020-05-28 14:57:18 · 472 阅读 · 0 评论 -
非关系数据库(MongoDB)和关系型数据库(MySQL)的区别
MongoDBMySQL数据库模型非关系型关系型存储方式虚拟存储+持久化不同的引擎有不同的存储方式查询语句独特的MongoDB查询方式传统SQL语句架构特点可以通过副本集以及分片来实现高可用常见有单点,M-S,MHA,Cluster,MMM等架构方式数据处理方式基于内存,将热数据存在物理内存中,从而达到高速读写不同的引擎拥有其自己的特点MySQL是关系型数据库。优势:在不同的引擎上有不同 的存储方式。查询语句是使用传统的sql语句...原创 2020-05-27 19:59:40 · 2952 阅读 · 0 评论 -
热备份和冷备份
冷备份 冷备份发生在数据库已经正常关闭的情况下,当正常关闭时会提供一个完整的数据库。冷备份是将关键性文件拷贝到另外位置的一种说法。对于备份数据库信息而言,冷备份是最快和最安全的方法。冷备份的优点:1.是非常快速的备份方法(只需拷贝文件)2.容易归档(简单拷贝即可)3.容易恢复到某个时间点上(只需将文件再拷贝回去)4.能与归档方法相结合,作数据库“最新状态”的恢复5.低度维护,高度安...原创 2020-05-04 11:20:04 · 2223 阅读 · 0 评论 -
数据库锁的分类
锁是网络数据库中的一个非常重要的概念,当多个用户同时对数据库并发操作时,会带来数据不一致的问题,所以,锁主要用于多用户环境下保证数据库完整性和一致性。数据库锁出现的目的:处理并发问题并发控制的主要采用的技术手段:乐观锁、悲观锁和时间戳。InnoDB支持表、行(默认)级锁,而MyISAM支持表级锁。锁分类从数据库系统角度分为三种:排他锁、共享锁、更新锁。从程序员角度分为两种:一种是悲观锁,...原创 2020-04-27 00:53:07 · 967 阅读 · 0 评论 -
数据库调优
数据库优化问题从以下几个层面入手:根据服务层面:配置mysql性能优化参数从系统层面增强mysql的性能:优化数据表结构、字段类型、字段索引、分表,分库、读写分离等等从数据库层面增强性能:优化SQL语句,合理使用字段索引从代码层面增强性能:使用缓存和NoSQL数据库方式存储,如MongoDB/Memcached/Redis来缓解高并发下数据库查询的压力减少数据库操作次数,尽量使用数据库...原创 2020-04-19 17:52:40 · 963 阅读 · 0 评论 -
数据库范式
范式是关系数据库理论的基础,在设计数据库结构过程中所要遵循的规则和指导方法。6种范式依次是:1NF,2NF,3NF,BCNF(巴斯-科德范式),4NF,5NF。这里介绍前三个范式,即:第一范式(1NF),第二范式(2NF),第三范式(3NF)。◆ 第一范式(1NF):强调的是列的原子性,即列不能够再分成其他几列。 考虑这样一个表:【联系人】(姓名,性别,电话)。如果在实际场景中,一个联系...原创 2020-02-03 12:54:11 · 1601 阅读 · 0 评论 -
聚簇索引和非聚簇索引
聚簇索引是对磁盘上实际数据重新组织以按指定的一个或多个列的值排序的算法。特点是存储数据的顺序和索引顺序一致。一般情况下主键会默认创建聚簇索引,且一张表只允许存在一个聚簇索引。在《数据库原理》一书中是这么解释聚簇索引和非聚簇索引的区别的:聚簇索引的叶子节点就是数据节点,而非聚簇索引的叶子节点仍然是索引节点,只不过有指向对应数据块的指针。因此,MYSQL中不同的数据存储引擎对聚簇索引的支持不同...原创 2020-02-02 18:08:39 · 521 阅读 · 0 评论 -
MySQL存储引擎
MySQL存储引擎存储引擎MySQL存储引擎存储引擎 MySQL数据库在实际的工作中分为了语句分析层和存储引擎层,其中语句分析层主要负责与客户端完成连接并且事先分析出SQL语句的内容和功能,存储引擎层则主要负责接收来自语句分析层的分析结果,完成相应的数据输入输出和文件操作,即如何存储数据、如何为存储的数据建立索引和如何更新、查询数据等技术的实现方法。因为在关系数据库中数据的存储是以表的形式存...原创 2020-01-30 15:03:40 · 1607 阅读 · 0 评论 -
MySQL事务特性以及事务的隔离级别
MySQL事务特性以及事务的隔离级别事务的四大特性(ACID)事务的隔离级别MySQL数据库的四种事务隔离级别事务的四大特性(ACID) 数据库支持事务操作,必须要具备以下四个特性:原子性(Atomicity) 原子性:事务包含的所有操作要么全部成功,要么全部失败回滚,因此事务的操作如果成功就必须要完全应用到数据库,如果操作失败则不能对数据库有任何影响。一致性(Consistenc...原创 2020-01-30 14:04:29 · 3033 阅读 · 0 评论 -
SQL
【1】film表字段说明film_id电影idtitle电影名称description电影描述信息category表字段说明category_id电影分类idname电影分类名称last_update电影分类最后更新时间film_category表字段说明film_id电影id...原创 2019-12-30 17:26:44 · 925 阅读 · 0 评论 -
MySQL索引
索引的实现原理 索引是一个排序的列表,存储着索引的值和包含这个值的数据所在行的物理地址,在数据十分庞大的时候,索引可以大大加快查询的速度。因为使用索引后可以不用扫描全表来定位某行的数据,而是先通过索引表找到该行数据对应的物理地址然后访问相应的数据。 MySQL支持诸多存储引擎,而各种存储引擎对索引的支持也各不相同,因此MySQL数据库支持多种索引类型,如BTree索引,B+Tree索引,哈...原创 2019-12-14 22:31:47 · 503 阅读 · 0 评论 -
MySQL 窗口函数/视图
窗口函数 窗口函数可以进行排序,生成序列号等一般的聚合函数无法实现的高级操作。只有SELECT和ORDER BY 子句直接支持窗口函数。窗口函数也称为OLAP函数,即对数据库数据进行实时分析处理。窗口函数就是为了实现OLAP而添加的标准SQL功能。窗口函数语法:其中[]中的内容可以省略<窗口函数> over ([partition by <列清单>] order by...原创 2019-12-06 20:16:16 · 1162 阅读 · 0 评论 -
亿级订单表数据存储
海量数据的处理问题:订单数据越来越多(亿级),查询越来越慢,如何处理?分库分表会带来哪些副作用?可能的解决方式有哪些?目前经常使用的关系型数据库如MySQL、SQL Server等,都是以“行”为单位进行存储,为了快速检索,也都采用了B树或其他索引技术。从原理上来讲,表中的数据越多,索引树的范围越大,磁盘读取也越多,性能也就越低。从实践角度来看,一般以百万到千万作为一个表的存储量级,超出该...原创 2019-12-06 09:49:22 · 2956 阅读 · 0 评论