MySQL5.7
文章平均质量分 86
从基础到深入,一步步掌握MySQL
白夜行515
世界上有两样东西不能直视:一是太阳,二是人心!
展开
-
【MySQL深入】SQL查询优化
1. 查询优化点尽量避免全表扫描,应考虑在 where 及 order by 涉及的列上建立索引尽量避免在 where 子句中对字段进行 null 值判断尽量避免在 where 子句中使用!=或<>或or操作符,可以用IN()取代OR尽量避免在 where 子句中对字段进行函数操作尽量避免大事务操作,提高系统并发能力避免查询不需要的数据,尽量少用select * ,只查询需要的字段即可。只要一行数据时使用 LIMIT 1永远为每张表设置一个ID作为主键把IP地址存成 UNSI原创 2021-02-13 17:43:46 · 290 阅读 · 0 评论 -
【MySQL深入】分库分表原理
1.背景随着公司业务的高速发展,数据量越来越大,已经到达了千万级别,预计不久后就会破亿。原来的MySQL架构(一主多从)已不适应这么大的数据量,所以急需技术升级。数据量预计:现在单表的数据量在1400万行左右,按照现在的业务,每天5.6万的增量,一年增加2050万左右,加上业务的增长,预计在3年后达到亿级。当数据量达到千万甚至上亿时,单台数据库服务器的存储能力会成为系统的瓶颈,主要体现在以下几个方面数据量太大,读写的性能会下降,即使有索引,索引也会变得很大,性能同样会降下。数据库文件会得很大原创 2021-02-14 18:01:53 · 1308 阅读 · 2 评论 -
【MySQL深入】MySQL杂谈
1. MySQL的抖动脏页:当内存数据页跟磁盘数据页内容不一致,干净页:内存数据写入到磁盘后,内存和磁盘上的数据页的内容一致平时执行很快的更新操作,其实就是在写内存和日志,而MySQL偶尔“抖”一下的那个瞬间,可能就是在刷脏页(flush)。刷脏页的时机:InnoDB的redo log写满了。系统会停止所有更新操作,把checkpoint往前推进,redo log留出空间可以继续写(整个系统就不能再接受更新了,所有的更新都必须堵住)系统内存不足。当需要新的内存页,而内存不够用的时候,就要淘汰原创 2021-02-13 22:04:03 · 198 阅读 · 0 评论 -
【MySQL深入】主从复制原理
1. MySQL主从复制主从复制步骤1)、主库db的更新事件(update、insert、delete)被写到binlog2)、从库发起连接,连接到主库3)、主库创建一个binlog dump thread,把binlog的内容发送到从库4)、从库启动之后,创建一个I/O线程,读取主库传过来的binlog内容并写入到relay log5)、从库创建一个SQL线程,从relay log(中继日志)里面读取内容并且在备库执行,当SQL线程赶上IO线程的时候,中继日志通常记录在系统缓存中,所以的开原创 2021-02-13 21:11:20 · 199 阅读 · 2 评论 -
【MySQL深入】锁详解
1.锁概述锁的定义:计算机协调多个进程或线程并发访问某一资源的机制。但加锁会消耗资源共享锁与排他锁共享锁(读锁):其他事务可以读,但不能写。例如:select * from article lock in share mode;排他锁(写锁) :其他事务不能读取,也不能写。例如:select * from article for update;乐观锁与悲观锁悲观锁:假定会发生并发冲突,屏蔽一切可能违反数据完整性的操作。乐观锁:假设不会发生并发冲突,只在提交操作时检查是否违反数据完原创 2021-02-13 12:10:48 · 136 阅读 · 0 评论 -
【MySQL深入】事务原理
1.事务的隔离级别1.1 事务基本概念请参考我之前写的博客:【MySQL基础】事务1.2 SQL标准的事务隔离级别读未提交(read uncommitted):一个事务还没提交时,它做的变更就能被别的事务看到。读提交(read committed):一个事务提交之后,它做的变更才会被其他事务看到。可重复读(repeatable read):一个事务执行过程中看到的数据,总是跟这个事务在启动时看到的数据是一致的。当然在可重复读隔离级别下,未提交变更对其他事务也是不可见的串行化(serial原创 2021-02-09 21:39:36 · 140 阅读 · 0 评论 -
【MySQL深入】索引优化
一、索引概述1.1 索引的定义索引是为了提高数据查询的效率,就像书的目录1.2 索引的常见模型哈希表是一种以键-值(key-value)存储数据的结构,但是多个key值经过哈希函数的换算,可能会出现同一个值的情况。解决方法是拉出一个链表(链地址法)。哈希表的结构适合只有等值查询的场景有序数组索引:等值查询和范围查询场景中的性能较好,但只适用于静态存储引擎,更新时效率低N叉树:“N”取决于数据块的大小。查询和更新的时间复杂度都是O(log(N)),二叉树搜索效率最高,但大多数据库存储并没有使原创 2021-02-06 10:32:38 · 162 阅读 · 0 评论 -
【MySQL深入】Explain详解
1.Explain概述使用EXPLAIN关键字可以模拟优化器执行SQL语句,从而知道MySQL是如何处理SQL语句的。在日常的工作中,我们经常需要借助EXPLAIN来查看SQL语句的执行计划,查看SQL语句是否用上了索引,是否进行了全表扫描,来分析SQL的性能瓶颈。在select语句之前增加explain关键字,MySQL会在查询上设置一个标记,执行查询会返回执行计划的信息,而不是执行SQL。EXPLAIN可以查看 SELECT, DELETE, INSERT, REPLACE,和 UPDATE语原创 2021-01-24 22:37:57 · 657 阅读 · 0 评论 -
【MySQL深入】一条SQL更新语句的执行过程
1.MySQL逻辑架构示意图对于一条update语句来说,也会执行上图中的流程,如果您对于上图中的连接器、分析器等名词不太熟悉,请查看上一篇文章:MySQL逻辑架构中各名词详解2.一条示例update语句执行过程简析# 建表SQLcreate table `article` ( `id` bigint(20) unsigned NOT NULL DEFAULT '0', `commentcnt` int(11) unsigned NOT NULL DEFAULT 0,原创 2021-01-23 11:23:58 · 4462 阅读 · 7 评论 -
【MySQL深入】一条SQL查询语句的执行过程
1.MySQL基本架构示意图MySQL可以分为Server层和存储引擎层两部分Server层包括连接器、查询缓存、分析器、优化器、执行器等,涵盖MySQL的大多数核心服务功能,以及所有的内置函数(如日期、时间、数学和加密函数等),所有跨存储引擎的功能都在这一层实现,比如存储过程、触发器、视图等。存储引擎层负责数据的存储和提取。其架构模式是插件式的,支持InnoDB、MyISAM、Memory等多个存储引擎。2.连接器定义:负责跟客户端建立连接、获取权限、维持和管理连接。mysql -h原创 2021-01-17 11:11:03 · 666 阅读 · 2 评论 -
【MySQL基础】如何选择存储引擎
引入在介绍存储引擎之前,先来回顾一下索引的相关知识。索引是对数据库表中一个或多个列的值进行排序的结构,建立索引有助于更快地获取信息。 mysql 有四种不同的索引类型:主键索引 ( PRIMARY )唯一索引 ( UNIQUE )普通索引 ( INDEX )全文索引(FULLTEXT , MYISAM 及 mysql 5.6 以上的 Innodb )建立索引的目的是加快对表中记录的查找原创 2017-07-31 17:04:02 · 507 阅读 · 0 评论 -
【MySQL基础】事务与存储过程
1.事务的概念(1)事务:逻辑上的一组操作,MySQL默认自带事务,但是一个语句独占一个事务,也可以自己来控制事务。*start transaction —开启事务,在这条语句之后的sql将处于同一事务中,并不会立即影响到数据库 *commit –提交事务,让这个事务中的sql对数据库的影响立即发生 *rollback – 回浪事务,取消这个事务,这个事务不会对数据库中的数据产生影响了2.事务原创 2017-04-17 21:53:20 · 580 阅读 · 0 评论 -
【MySQL基础】多表操作
1.外键(1)定义: 引用另一个表中的一列或多列,被引用的列应该具有主键约束或唯一性约束,外键用于建立和加强两个表数据之间的连接。(2)为表添加外键约束alter table student add constraint FK_ID foreign key (gid) references grade (id) ;注: gid外键依赖于grade表中的id主键,gid是student的外键。(3)原创 2017-04-17 21:27:20 · 454 阅读 · 0 评论 -
【MySQL基础】表的基本操作
1.创建表例:创建一张名为employee的表 2.查看表结构(1)显示表的结构例:查看employee的表结构(2)查看表的建表语句例:查看表employee的建表语句(3)查看数据库中的所有表例:查看数据库dream中的所有表 3.修改表的结构(1)增加列例:给表employee增加一列,表名为image,数据类型为blob(2)修改列例:修改表employee中salary列的数据类型为f原创 2017-04-17 18:03:59 · 623 阅读 · 0 评论 -
【MySQL基础】视图
1.定义: 从一个或多个表中导出来的表,一种虚拟存在的表。2.创建视图(1)在单表上创建视图例:create view view_stu as select id ,money from account;create or replace view view_stu as select id ,money,name from account;create view view_stu2 (工号,工资原创 2017-04-17 21:59:17 · 352 阅读 · 0 评论 -
【MySQL基础】数据的备份与还原
1.数据的备份(1)单个数据库备份mysqldump -u username -p mydb2 >c:/311.sql(2)备份所有数据库mysqldump -u username -p --all-databases >c:/515.sql2.数据的还原(1)恢复数据库 mysql -u root -p mydb3 < 311.sql(2) source命令*创建数据库 create datab原创 2017-04-17 22:14:14 · 511 阅读 · 0 评论 -
【MySQL基础】数据的增删改查
1.添加数据例:先查询表的结构,然后添加数据 insert into student values(1,286.8,'1994-12-28','W');注: 插入数据应与字段的数据类型相同,数据大小应该在范围内。2.删除数据(1)删除Lee的信息delete from student where name = 'Lee';(2)删除所有记录delete from student ;(3)使用tr原创 2017-04-17 20:41:48 · 469 阅读 · 0 评论 -
【MySQL基础】数据库概述
1.数据库的引入(1)将数据保存到内存: 这种存储方式读写非常快,但程序关闭导致数据丢失(2)将数据保存到文件: 这种存储方式数据可以永久保存,但频繁地IO操作,效率不高,也不利于数据管理。(3)数据保存到数据库软件: 这种存储方式数据永久保存下来,数据管理非常方便。 (例如查询非常快速和方便)2.数据库的定义: 提供一个存储空间用来存储各种数据,即一个存储数据的容器。(1)数据库管理系统原创 2017-04-14 09:29:29 · 640 阅读 · 0 评论 -
【JDBC详解】基础
一、概念1.定义JDBC (Java Database Connectivity),是一组标准的Java语言中的接口和类,它的意义是在Java程序中执行SQL语句。2.数据库驱动应用程序、JDBC API、数据库驱动及数据库之间的关系 3.常用的类和接口(1)Driver接口 : 表示java驱动程序接口。常用方法:*connect(url, properties): 连接数据库的方法。 ur原创 2017-04-29 12:15:53 · 362 阅读 · 0 评论 -
【JDBC详解】深入
1.SQL注入攻击(1)定义:SQL 注入是利用某些系统没有对用户输入的数据进行充分的检查,而在用户输入数据中注入非法的 SQL 语句段或命令,从而利用系统的 SQL 引擎完成恶意行为的做法。(2)解决方法:用 PreparedStatement(预编译) 取代 Statement 就可以了原因:使用预编译SQL语句避免了频繁sql拼接 (可以使用占位符),也可以防止sql注入例:OR 1=1 语句原创 2017-04-29 14:04:31 · 426 阅读 · 0 评论 -
【JDBC详解】优化
1.BeanUtils组件(1)出现原因:程序中对javabean的操作很频繁, 所以apache提供了一套开源的api,方便对javabean的操作!即BeanUtils组件。(2)作用:简化javabean的操作!(3)下载:从www.apache.org下载BeanUtils组件,然后再在项目中引入jar文件!(4)常用方法对象属性的拷贝BeanUtils.copyProperty(admi原创 2017-04-29 14:46:07 · 408 阅读 · 0 评论 -
【JDBC详解】连接池与分页
一、连接池1.由来:一个用户至少要用到一个连接。当用户过多时,需要创建巨大数量的连接对象,这会使数据库承受极大的压力,为了解决这种现象,出现了数据库连接池。2.定义:在用户和数据库之间创建一个”池”,这个池中有若干个连接对象,当用户想要连接数据库,就要先从连接池中获取连接对象,然后操作数据库。即数据库连接池就是提供连接的 3.自定义连接池例:public class MyPool { pr原创 2017-04-29 22:09:42 · 1035 阅读 · 0 评论 -
【MySQL基础】触发器与本地化
触发器1.定义:为响应任意语句而自动执行的一条MySQL语句2.创建触发器create trigger newproduct after insert on products for each now select "product added";3.删除触发器drop trigger newproduct;4.使用触发器(1)insert触发器create trigger neworder aft原创 2017-04-20 20:40:29 · 490 阅读 · 0 评论 -
【MySQL基础】库的基本操作与数据类型
1.数据库服务器、数据库和表的关系图解 2.创建数据库(1)普通的定义方式:CREATE DATABASE [IF NOT EXISTS] db_name [create_specification [, create_specification] ...] 例:创建一个名为dream的数据库 (2)CHARACTER SET:指定数据库采用的字符集CHARACTER原创 2017-04-17 15:37:20 · 415 阅读 · 0 评论