![](https://img-blog.csdnimg.cn/20200613021526401.jpg?x-oss-process=image/resize,m_fixed,h_224,w_224)
从头开始学MySQL
文章平均质量分 61
本专栏系统地梳理了MySQL的各个核心知识点,并对其进行讲解和演示。
lwen.steven
学好Java,为公司“添砖加瓦”!
展开
-
11.SpringBoot整合DBLE分库分表和读写分离
1.架构通过分库分表的高可用章节搭建的MySQL架构,在此基础上,整合SpringBoot,实现分库分表和读写分离。原创 2023-01-30 14:38:29 · 435 阅读 · 0 评论 -
10.分库分表的高可用
可以看到主数据库A并没有查询语句,而从数据库A’出现了查询语句,与db.xml中配置的rwSplitMode="1"预期结果一致。DBLE根据拆分字段,判断数据在哪个节点上,如果DBLE不知道数据在哪里或者需要扫描更多的节点,就会导致性能下降。(1).将A现有数据库和数据表里的数据同步到A’上,并参照主从复制章节为A配置一个从节点A’通过DBLE数据端,查询id=1的数据,然后查看A和A’的SQL语句执行情况。(2).进入DBLE所在节点,为A配置一个从节点A’(3).读写分离架构。(3).重启DBLE。原创 2023-01-30 14:37:10 · 186 阅读 · 0 评论 -
9.分库分表中间件DBLE
1.原理分析SQL语句,根据SQL语义将SQL拆分成多个,发送至数据节点,将多个数据节点的结果聚集,返回客户端。2.DBLE基于MyCat的开源免费的、高性能、高可用的MySQL分库分表中间件。原创 2023-01-30 14:35:30 · 509 阅读 · 0 评论 -
8.分库分表理论
1.分表(1).垂直按照字段分表,表结构不同,一般分为冷热,即经常操作的字段放在一张表,不经常操作的放在另一张表。使用案例,订单的冷热数据。原创 2023-01-30 14:34:13 · 79 阅读 · 0 评论 -
7.分区表
将InnoDB一张表分为多张表,从InnoDB层看是多张表,Server层依然看作一张表,而水平分表类似分区表,但Server层也分了。通过INDEX DIRECTORY = '/data1’和DATA DIRECTORY = '/data2’指定存储位置。(2).Server层看作一张表,客户端也看作一张表。(3).存储引擎层分为4张表。原创 2023-01-30 14:33:59 · 67 阅读 · 0 评论 -
6.主主复制实战
1.主主复制架构两个节点均为Master,两个节点互为Slave,一个节点出现故障时,无需切换。平时只使用一个数据库进行读写操作,另一个节点设置为只读,当写库压力过大时,也可以进行读写分离,减轻写库压力,其架构如下图所示。原创 2023-01-30 14:32:36 · 67 阅读 · 0 评论 -
5.主从复制实战
从数据库存在一个等待主数据库发送dump binlog的线程,还有一个读取binlog的线程。(3).查看主库binlog日志写到哪一条,需要在从数据库配置File和Position。(5).再次查看从库binlog日志写到哪一条,发现和配置的主数据库一样。(2).给主库加全局锁,只能读不能写,保证不产生新的binlog日志。(4).把主库所有数据库数据备份,并将备份文件上传到从库。(5).取消全局锁,新增数据,产生新的binlog日志。(1).打开binlog,并重启从数据库。(4).从数据库操作。原创 2023-01-30 14:32:19 · 77 阅读 · 0 评论 -
4.复制理论
因为binlog传送转relay log以及执行relay log都需要时间,所以备库延时理论上无法消灭,只能减弱。事务或者SQL执行的速度高,通过扩展和扩展手段达成,复制提升速度,扩展提升容量。同时处理的事务数高,通过复制和扩展手段达成,将数据分散至多节点。主节点发送binlog和提交事务是异步的,所以可能导致数据丢失。系统可用时间高,通过切换手段达成,节点间身份切换保证随时可用。(2).业务对数据实时性要求比较高,响应要快,比如充值业务。(3).业务对数据实时性要求比较高,响应需求不那么高。原创 2023-01-30 14:31:27 · 107 阅读 · 0 评论 -
3.索引优化
加上inventory_id,也不需要回表的原因是,idx_store_id_film_id索引不仅包含store_id和film_id两个联合索引字段,还包含主键,可以进行回表操作。MySQL在选取索引时,会参考索引的基数cardinality,基数是估算的,不是精确的,反映这个字段有多少种取值,可以根据索引基数,判断索引性能的好坏,基数越大,效果越好。覆盖索引是指查询语句从执行到返回结果均使用同一个索引,通俗来讲索引里包含了查询所需要的所有字段,不需要再去主索引去查询其它字段,这样可以有效减少回表。原创 2023-01-30 14:30:19 · 73 阅读 · 0 评论 -
2.InnoDB
1.概念(1).索引组织表由索引组织起来的表,索引组织表中的数据,被主键的索引组织起来,InnoDB中,表都是根据主键顺序组织的。原创 2023-01-30 14:29:05 · 117 阅读 · 0 评论 -
1.一条SQL语句如何执行
1.MySQL的架构MySQL的架构包括客户端、服务端、存储引擎和文件系统,其架构如下图所示。原创 2023-01-25 23:37:35 · 113 阅读 · 0 评论 -
22.定时备份数据库
1.解决方案定时备份数据库的解决方案大致上分为三个部分,首先是定时调度器,如Windows平台上的定时计划和Linux平台上的Crontab。其次是数据库备份脚本,如Windows平台上的DOS批处理脚本和Linux平台上的Shell脚本。最后是备份的sql语句,主要使用select…into outfile和mysqldump。2.Windows上实现定时备份MySQLschtasks.exe用于安排命令和程序在指定时间内运行或定期运行,它可以从计划表中添加和删除任务、按需要启动和停止任务、显示和更原创 2020-07-21 19:12:32 · 186 阅读 · 0 评论 -
21.复制表
1.只复制表结构只复制表结构,包括主键、索引,但不会复制表数据。create table tableName like someTable;2.只复制表数据复制表的大体结构及全部数据,不会复制主键、索引等。create table tableName select * from someTable;3.完整复制表结构+数据分两步完成,先复制表结构,再插入数据。create table tableName like someTable; insert into tableName s原创 2020-07-21 19:12:22 · 243 阅读 · 0 评论 -
20.导入数据
1.load data在MySQL中,可以使用load data语句将文本文件数据导入到对应的数据库表中,可以将load data语句看成是select…into outfile的反操作。load data infile pathNameinto table tableNamecharacter set utf8 fields terminated by ','enclosed by '"'lines terminated by '\r\n';2.source在MySQL中,可以使用sou原创 2020-07-21 19:12:09 · 132 阅读 · 0 评论 -
19.导出数据
1.权限设置在MySQL中,如果使用命令进行数据的导入导出,需要配置相关的权限。通过以下语句进行查看。show variables like '%secure%';secure_file_priv取值说明取值描述null表示不允许导入导出空表示没有任何限制指定路径表示导入导出只能在指定路径下完成2.select…into outfile在MySQL中,可以使用select…into outfile语句将查询结果数据导出到文本文件。select fi原创 2020-07-21 19:11:26 · 199 阅读 · 0 评论 -
18.SQL注入
1.SQL注入SQL注入(SQL Injection)是指应用程序对用户输入数据的合法性没有判断、没有过滤,攻击者可以在应用程序中通过表单提交特殊的字符串,该特殊字符串会改变SQL的运行结果,从而在管理员毫不知情的情况下实现非法操作,以此来实现欺骗数据库执行非授权的任意查询。2.特性广泛性:任何一个基于SQL语言的数据库都可能受到SQL注入攻击。很多开发人员都为了省事不对表单参数进行校验。隐蔽性:SQL注入语句一般都嵌入在普通的HTTP请求中,很难与正常语句区分开,SQL注入也有很多变种。操作性:原创 2020-07-21 19:11:00 · 144 阅读 · 0 评论 -
17.字符集
1.字符集字符是各种文字和符号的总称,包括各国家文字、标点符号、图形符号、数字等。字符集是多个字符的集合,字符集种类较多,每个字符集包含的字符个数不同,常见的字符集有ASCII、GB2312、GBK、 GB18030、UniCode等。计算机要准确的处理各种字符集文字,就需要进行字符编码,以便计算机能够识别和存储各种文字。字符集描述ASCII最简单的西文编码方案,主要用于显示现代英语和其他西欧语言。使用1个字节表示,可表示128个字符GB2312国家标准简体中文字符集,兼原创 2020-07-21 19:10:51 · 155 阅读 · 0 评论 -
16.触发器
1.简介触发器(trigger)用于监视某种情况并触发某种操作,它是与表事件相关的特殊的存储过程,它的执行不是由程序调用,而是由事件来触发。例如,当对某张表进行insert、delete、update操作时就会触发执行它。2.语法create trigger triggerName triggerTime triggerEvent on tableName for each row triggerStmttriggerName:触发器名称triggerTime:触发时间,取值有before、原创 2020-07-21 19:10:39 · 185 阅读 · 0 评论 -
15.存储过程
1.简介存储过程(Stored Procedure)是为了完成特定功能的SQL语句集,经编译创建并保存在数据库中, 用户可通过指定存储过程的名字并给定参数来调用执行,类似于编程语言中的方法或函数。2.优点复用性:存储过程是对SQL语句的封装,支持接收参数,并返回运算结果,可增强复用性。逻辑性:存储过程可以隐藏复杂的业务逻辑、商业逻辑。3.缺点可移植性:存储过程的可移植性较差,如果更换数据库,要重写存储过程。可扩展性:存储过程难以调试和扩展。4.语法#存储过程定义delimiter //原创 2020-07-21 19:10:17 · 501 阅读 · 0 评论 -
14.视图
1.简介视图是一个虚拟表,其内容由select查询语句定义。和真实的表一样,视图也包含行和列,对视图的操作与对表的操作基本一致。视图中的数据是在使用视图时动态生成的,视图中的数据都存储在基表中。2.特点可读性:简化了复杂的查询,使复杂的查询更易于理解和使用。安全性:视图可以隐藏一些敏感的信息,可以把权限限定到行或列级别。重用性:视图是对复杂查询语句的封装以及对数据库的重构,不会影响程序的运行。3.使用#创建视图create view viewName as select...;#使用视图原创 2020-07-21 19:10:07 · 104 阅读 · 0 评论 -
13.预处理
1.简介从MySQL4.1开始,就支持预处理语句(Prepared statement),这大大提高了客户端和服务器端数据传输的效率。当创建一个预定义SQL时,客户端向服务器发送一个SQL语句的原型。服务器端接收到这个SQL语句后,解析并存储这个SQL语句的部分执行计划,返回给客户端一个SQL语句处理句柄,以后每次执行这条SQL,客户端都指定使用这个句柄,可以达到一次编译、多次运行的效果。2.特点高效:在服务器端只需要解析一次SQL,在服务器端某些优化器的工作只需要执行一次,它会缓存一部分执行计划。原创 2020-07-21 19:09:51 · 134 阅读 · 0 评论 -
12.事务控制
1.简介事务(Transaction)是指作为一个逻辑工作单元执行的一系列操作,这些操作要么全部成功,要么全部失败。事务确保对多个数据的修改作为一个单元来处理。例如,张三在ATM机上给李四转账100元,在银行的业务系统中,主要会执行两步数据变更操作。一是从张三的账户减去100元,二是给李四的账户增加100元。试问,如果操作1执行成功,操作2执行失败会发生什么情况?这时就需要运用事务控制来避免这样的情况发生。在MySQL中,只有使用了Innodb存储引擎的数据库或表才支持事务。事务用于维护数据库的完原创 2020-07-21 19:09:39 · 297 阅读 · 0 评论 -
11.索引的基本使用
1.简介索引是一种特殊的数据结构,类似于图书的目录,它能够极大地提升数据库的查询效率。如果没有索引,在查询数据时必须扫描表中的所有记录才能找出符合条件的记录,这种全表扫描的查询效率非常低。2.种类索引种类描述普通索引最基本的索引,没有任何限制,仅加速查询唯一索引索引列的值必须唯一,但允许有空值主键索引一种特殊的唯一索引,不允许有空值。一般是在建表的同时自动创建主键索引复合索引两个或多个列上的索引被称作复合索引全文索引对文本内容进行分词索引3.原创 2020-07-21 19:09:29 · 589 阅读 · 0 评论 -
10.查询分析器
1.简介explain命令可以查看SQL语句的执行计划。当explain与SQL语句一起使用时,MySQL将显示执行计划的相关信息。也就是说,MySQL解释了它将如何处理语句、如何联接表以及以何种顺序联接表的信息。2.功能查询分析器提供包括分析表读取顺序、数据读取的操作类型、索引实际使用情况、表之间的引用等功能。3.使用explain的使用很简单,只需要在SQL语句之前加上explain命令即可,除select语句外,explain也能分析insert、update和delete语句。参原创 2020-07-21 19:09:13 · 1209 阅读 · 0 评论 -
9.慢查询日志
1.MySQL的日志类型日志用于记录数据库的运行情况,以及用户对数据库执行的各类操作。当数据库发生故障时,可以根据日志分析和解决问题,从而对数据库进行恢复。日志描述重做日志重做日志是一种物理格式的日志,记录的是物理数据页面的修改信息,顺序写入redo log file回滚日志回滚日志是一种逻辑格式的日志,在执行undo的时候,仅仅是将数据从逻辑上恢复至事务之前的状态,而不是从物理页面上操作实现的,这一点是不同于redo log的二进制日志二进制日志是一种逻辑格式的日原创 2020-07-21 19:09:04 · 126 阅读 · 0 评论 -
8.查询缓存
1.查询缓存很多数据库产品都能够缓存查询的执行计划,对于相同类型的SQL就可以跳过SQL解析和执行计划分成阶段。MySQL在某种场景下也可以实现,但是MySQL还有另一种不同的缓存类型来缓存完成的select查询结果,也就是查询缓存。MySQL将缓存存放在一个引用表中,类似于HashMap的数据结构,Key查询SQL语句,Value查询结果。当发起查询时,会使用SQL语句去缓存中查询,如果命中则立即返回缓存中的结果集。2.启用或禁用查询缓存使用下面命令查看MySQL是否启用查询缓存。show va原创 2020-07-21 19:08:51 · 394 阅读 · 0 评论 -
7.常用函数
1.内置函数MySQL函数指的是MySQL数据库提供的内置函数,包括数学函数、字符串函数、日期和时间函数、聚合函数、条件判断函数等,这些内置函数可以帮助用户更方便地处理表中的数据, 简化用户的操作。函数描述数学函数如abs、sort、mod、sin、cos、tan、cot等字符串函数如length、lower、upper、trim、substring等日期和时间函数如now、curdate、curtime、sysdate、date_format、year、month原创 2020-07-21 19:08:38 · 185 阅读 · 0 评论 -
6.表连接
1.表连接简介表连接是在多个表之间通过一定的连接条件,使表之间发生关联,进而能从多个表之间获取数据。表连接共有三种类型,内连接、外连接(左外连接、右外连接和全连接)以及自连接。2.内连接只连接匹配的行。select a.field, b.field from tableName1 as a inner join tableNam2 as bon a.field = b.field如下图所示,查询学生的学科成绩。3.左外连接包含左表的全部行(不管右表是否存在与之匹配的行),以及右表中全原创 2020-07-21 19:08:28 · 619 阅读 · 0 评论 -
5.DQL
1.select的完整语法select field1, field2, ...,fieldN(*表示所有字段)from tableName[where condition][group by {field | expr | position} [having condition][order by {field | expr | position} [asc | desc][limit offset,count];如下图所示,查询contacts表中所有记录的name和age字段。2.单原创 2020-07-21 19:08:16 · 109 阅读 · 0 评论 -
4.DML
1.新增insert into tableName(field1, field2, ..., fieldN) values (value1, value2, ..., valueN);如下图所示,向contacts数据表中插入一条名为steven的数据。如果字段是字符型,值必须使用单引号或者双引号,如果值本身带单引号或双引号,则需要转义。如果所有列都要添加数据,insert into语句可以不指定列,即insert into tablename values(value1, value2, …原创 2020-07-21 19:07:47 · 153 阅读 · 0 评论 -
3.DDL
数据库1.查看所有数据库名称show databases;如下图所示,infornation_schema、mysql、performance_schema以及sys都是mysql自带的系统级数据库。2.创建数据库create database if not exists databaseName character set = utf8;如下图所示,创建mydb数据库之后,通过命令查看当前系统中所含有的所有数据库。3.查看创建数据库的语句show create database d原创 2020-07-21 19:07:37 · 184 阅读 · 0 评论 -
2.DCL
MySQL的权限体系1.MySQL的权限信息主要存储在以下几张表中,当用户连接数据库时,MySQL会根据这些表对用户进行权限验证。表名描述user用户权限表,记录账号、密码及全局性权限信息db记录数据库相关权限table_priv用户对某个表拥有的权限column_priv用户对某表的某列所拥有的权限procs_priv用户对存储过程及存储函数的操作权限2.使用grant和revoke进行授权、撤销授权时,需要指定具体是哪些权限,这些权限大体可原创 2020-07-21 19:06:46 · 211 阅读 · 0 评论 -
1.SQL和存储引擎
1.SQL简介SQL是Structured Query Language的缩写,即结构化查询语言。SQL是一门标准的计算机语言,用于访问和操作数据库,其主要功能包括数据控制、数据定义、数据操纵和数据查询。2.SQL功能数据定义语言DDL(Data Definition Language):用于数据库、数据表、视图等的新增、删除和修改。DDL包括create、alter以及drop命令。数据操纵语言DML(Data Manipulation Language):用于新增、删除和修改数据表中的记录。DM原创 2020-07-21 19:06:30 · 290 阅读 · 0 评论 -
从头开始学MySQL
基础篇1.SQL和存储引擎2.DCL3.DDL4.DML5.DQL6.表连接7.常用函数8.查询缓存9.慢查询日志10.查询分析器11.索引的基本使用12.事务控制13.预处理14.视图15.存储过程16.触发器17.字符集18.SQL注入19.导出数据20.导入数据21.复制表22.定时备份数据库高级篇持续更新中,敬请期待…...原创 2020-07-21 19:06:17 · 328 阅读 · 0 评论