Mysql系统学习
文章平均质量分 90
mysql的学习以及优化
咔咔-
死磕MySql系列作者
展开
-
为什么不让用join?《死磕MySQL系列 十六》
大家好,我是咔咔 不期速成,日拱一卒在平时开发工作中join的使用频率是非常高的,很多SQL优化博文也让把子查询改为join从而提升性能,但部分公司的DBA又不让用,那么使用join到底有什么问题呢?最新文章死磕MySQL系列总目录为什么MySQL字符串不加引号索引失效?《死磕MySQL系列 十一》打开order by的大门,一探究竟《死磕MySQL系列 十二》重重封锁,让你一条数据都拿不到《死磕MySQL系列 十三》闯祸了,生成环境执行了DDL操作《死磕MySQL系列 十四》坚持学习、坚原创 2022-03-14 08:30:00 · 2430 阅读 · 3 评论 -
聊聊MySQL的加锁规则《死磕MySQL系列 十五》
本期来聊聊MySQL的加锁规则,知道这些规则后可以判断SQL语句的加锁范围,同时也可以写出更好的SQL语句,防止幻读问题的产生,在能力范围内最大程度的提升原创 2022-02-22 08:30:00 · 7898 阅读 · 23 评论 -
Linux安装MySQL8.0并设置可远程访问
本文将解决本地Navicat连接远程MySQL服务器提示不允许连接。一、问题还原本地Navicat连接centos7.3虚拟机的MySQL数据库确认连接后会报出一个这样的错误二、发现问题这个问题一看就是远程连接的问题,但是新学习的小伙伴估计就很难想到是这方面的问题,接下来咔咔一步一步的帮助解决这个问题。首先我们来到虚拟机终端,连接上MySQL。执行命令mysql -uroot -p,然后输入密码,进入到MySQL执行指令show databases;可以查看到目前所有的数据库我.原创 2020-07-07 23:01:29 · 2847 阅读 · 0 评论 -
【MySQL】表页跟索引的关系
innodb咋存储数据时,数据会存储在表页中,每页是16kb表页:存放了很多数据,它是innodb最小单元的存储空间没有索引时查询带索引时查询原创 2019-08-09 18:11:16 · 1909 阅读 · 1 评论 -
【MySQL】frm文件调整
在这一期学习中使用的是MySQL8.0,我们在之前的数据文件的文章写道,不管任何存储引擎都会生成一个frm文件,这是在MySQL5.5版本里边的MySQL8.0取消frm文件,元数据都存储到表空间...原创 2019-08-08 11:23:19 · 1495 阅读 · 0 评论 -
【MySQLprofiling分析
想要优化一条sql语句之前,我们需要先知道这条sql语句的瓶颈在哪profile是一个使用非常方便的查询诊断分析工具,通过该工具可以获取一条查询在整个执行过程中多种资源的消耗情况,例如内存消耗、I/O消耗和CPU消耗等。其中type参数的可选项含义如下:all:显示所有的信息block io:限时输入输出操作阻塞的数量context switches:显示自动或非自动context s...原创 2019-08-07 18:18:45 · 770 阅读 · 0 评论 -
【MySQL】一次200万数据的优化过程
数据库结构 CREATE TABLE `customers1` ( -- 身份证 `id` char(20) NOT NULL, -- 姓名 `name` varchar(20) NOT NULL, -- 城市名 `city` varchar(10) NOT NULL, -- 性别:1(男),0(女) ...原创 2019-08-07 17:26:32 · 2055 阅读 · 1 评论 -
【MySQL】Explain字段的解释
Explain命令是查看查询优化器是如何决定执行查询的主要方法。这个功能有局限性,并不总会说出真相,但它的输出是可以获取的最好信息,值得花时间去了解,因为可以学习到查询是如何执行的。学会解释explain将会帮助你了解MySQL优化器是如何工作的。Explain误区跟不足在执行Explain时MySQL不会执行查询,这是一个误区。事实上查询中包括子查询,那么MySQL实际上会执行子查询,...原创 2019-08-06 16:40:36 · 642 阅读 · 0 评论 -
【MySQL】把A表数据复制到B表中
A表结构create table user_fans( `id` int(11) unsigned not null auto_increment, `user_id` int(11) not null, `fans_id` int(11) not null, primary key (`id`));B表结构create table user_fans123( `id` int...原创 2019-08-05 18:45:25 · 7251 阅读 · 0 评论 -
【MySQL】使用存储过程+IF控制语句批量添加数据
创建数据库create table user_fans( `id` int(11) unsigned not null auto_increment, `user_id` int(11) not null, `fans_id` int(11) not null, primary key (`id`));创建存储过程create procedure user_fans_proced...原创 2019-08-05 18:23:22 · 1410 阅读 · 0 评论 -
【MySQL】SQL语句执行流程
这篇文章应该是在之前写的,但是当时没有学习明白,今天在来恶补一下SQL语句的执行流程sql的执行结构图解析器解析器分为俩部分 句法扫描器 与 语法规则模块句法扫描器 => 整个查询语句分解为多个令牌(一些不可以分隔的元素,列名)select count(*), status from table_name where id = ? order by sort gro...原创 2019-08-05 15:17:23 · 1477 阅读 · 0 评论 -
【MySQL】 unsigned使用
案例create table yyy( `id` int unsigned not null auto_increment, primary key (`id`));案例分析针对上边的表插如一条数据insert into yyy values(255);这时我们在插入一条数据,这个时候会报出一个错,可以看到这个值是插入不进去的insert into yyy values...原创 2019-08-05 11:23:39 · 22861 阅读 · 0 评论 -
【MySQL】性能优化介绍
在对于mysql的性能优化上,在以前估计考虑的太片面了,今天在别的的地方搜集了一些材料,仅供参考性能优化介绍优化没有固定的代码格式,也没有固定的操作方案,一切都是对待当下的问题,进行处理对于用户来说:‘又卡了,怎么死机了,反应太慢了’对于我们来说,程序执行时间太长了,每秒查询的次数,内存,cpu的利用率程序优化的目的合理的利用可利用的资源(技术能处理的,何必花费冤枉钱)吞吐量:越...原创 2019-08-02 10:59:05 · 537 阅读 · 0 评论 -
【MySQL】存储引擎
在mysql中我们常用的存储引擎也就是myisam和innodb,下面就以这俩种引擎进行说明查看一个表的存储引擎show create table user;修改数据库引擎alter table test engine = myisam;innodb跟myisam的区别MyISAM 在磁盘上攒簇三个文件,文件名和对应的表名是一致的frm文件:存储表的定义数据。my...原创 2019-08-01 15:13:03 · 496 阅读 · 0 评论 -
【MySQL】运行架构解析
这篇文章涉及到mysql的底层原理了,没有进行过深的研究,只是大概的阅读了一下,对其工作原理有个简单的认识就可以了,没有必要过深的研究运行流程MySQL结构图:执行流程分析:3.1.1 启动通过命令net start mysql(windows) / service mysql start(linux)启动MySQL服务调用初始模块;初始化模块就是在数据库启动的时候,对整个数据...原创 2019-08-01 11:23:12 · 532 阅读 · 0 评论 -
【MySQL】利用二进制文件进行数据恢复
查看二进制文件是否开启show variables like ‘log_bin’二进制文件存放的地址此处是在window下利用二进制文件恢复数据关于mysqlbinlog的使用参考官网: https://dev.mysql.com/doc/refman/5.7/en/mysqlbinlog.html这里没有截图,按照这个顺序走即可,这里只是实现一个简单的数据恢复,后期在深入来...原创 2019-08-01 10:59:25 · 1311 阅读 · 0 评论 -
【MySQL】数据文件
MySQL数据库会在data目录下面简历一个以数据库为名的文件夹,用来存储数据库中的表文件数据。不同的数据库引擎,每个表的扩展名也不一样,例如:MyISAM用“.MYD”作为扩展名,Innodb用“.ibd”,Archive 用“.arc”,CSV 用“.csv".frm"文件无论是那种存储引擎,创建表之后就一定会生成一个以表明命名的’.frm’文件。frm文件主要存放与表相关的数据信息,主...原创 2019-07-31 17:41:42 · 540 阅读 · 0 评论 -
【MySQL】日志分类
错误日志在mysql数据库中,错误日志功能是默认开启的。默认情况下,错误日志存储在mysql数据库的数据目录中。错误日志文件通常的名称为hostname.err。其中,hostname表示服务器主机名。错误日志信息可以自己进行配置的,错误日志所记录的信息是可以通过 log_error 和 log_warnings 来定义的,其中log-error是定义是否启用错误日志的功能和错误日志的存储...原创 2019-07-31 16:35:30 · 987 阅读 · 0 评论 -
【MySQL】8.0.11安装教程---Windows系统
下载MySQL安装包地址:https://dev.mysql.com/downloads/file/?id=476233解压放置D盘这个data目录是后期生成的配置环境变量配置my.ini文件新建my.ini文件然后里边写上配置[mysqld]# 设置3306端口port=3306# 设置mysql的安装目录basedir=E:D:\\mysql-8 # 切记此处...原创 2019-07-31 12:01:31 · 547 阅读 · 0 评论 -
【MySQL】基础结构
单版的结构MySQL = 客户端 + 服务端 客户端 = Connection(语言连接器例如:PHP-pdo,MySQLi) 服务端 = SQL层 + 存储引擎层 SQL层 = 链接/线程处理 + 查询缓存 + 分析器 + 优化器 存储引擎 = InnoDB + MariaDB + .....Connection:这一块其实主要是其...原创 2019-07-30 18:55:52 · 552 阅读 · 0 评论 -
【MySQL】死锁
在之前简单的实现了一个死锁案例分析insert update delect默认会加上排它锁原创 2019-07-30 17:27:13 · 510 阅读 · 0 评论 -
【MySQL】innodb行锁变表锁
关于下文中的表格看法,按照时间轴排列的InnoDB 行级锁是通过给索引上的索引项加锁来实现的,InnoDB行级锁只有通过索引条件检索数据,才使用行级锁;否则,InnoDB使用表锁在不通过索引(主键)条件查询的时候,InnoDB是表锁而不是行锁。创建表创建一个没有主键的表CREATE TABLE `test_no_key` (`f1` int(11) NOT NULL ,`f2...原创 2019-07-30 16:45:46 · 1715 阅读 · 0 评论 -
【MySQL】服务器异常停止的事物会如何应对
事物在服务器异常终止后会发生的情况可以结合这篇文章来看:https://blog.csdn.net/fangkang7/article/details/97379306事物在操作过程中没有进行commit,服务器终止我们都知道事物有俩个日志文件分别是redo log(重做日志)undo log(回滚日志)如果服务器重启会执行undo log,把数据还原为初始状态事物在操作过程中进程c...原创 2019-07-30 15:34:27 · 666 阅读 · 0 评论 -
【MySQL】乐观锁的实现
序言乐观锁是相对于悲观锁而言的。悲观锁大多数情况下是依靠数据库的锁机制实现的,悲观锁影响数据库的性能,而乐观锁是基于数据库版本记录机制来实现的。何谓数据库版本?即为数据库增加一个版本表示的字段,在读取数据的时候将版本号一同读出,在数据更细后,对此版本号加一。然后将提交的版本数据跟数据表对应记录信息进行对比,如果提交的数据版本号大于数据表的版本号,则更细。都这认为是过期数据简言之:乐...原创 2019-07-30 12:01:18 · 953 阅读 · 0 评论 -
【MySQL】事物回滚理解
事物的概念:事物由一个单独单元的一个或多个sql语句组成,如果其中一个语句不能完成,整个单元就会回滚,所有影响到的数据将返回到事物开始以前的状态。因而,只有事物中的所有语句都成功执行才能说明这个事物被成功的执行。这句话的本身没有什么问题,但是请看下面的案例mysql事务中有两条insert语句,其中第二条语句是错误的,在运行完事务后,第一条仍然插进去了,代码如下。//创建...原创 2019-07-30 11:03:35 · 1083 阅读 · 0 评论 -
【MySQL】事物隔离级别
author:咔咔WeChat:fangkangfk事务隔离级别隔离级别 读数据一致性 脏读 不可重复读的问题 幻读 未提交读 Read Uncommitted 最低级别,只能保证不读取物理上损坏的数据 是 是 是 已读提交 Read committed 语句级 否 是 是 可重复读取 Repea...原创 2019-07-29 19:00:46 · 553 阅读 · 0 评论 -
【MySQL】锁机制 -- 死锁
序言如何保证数据并发访问的一致性和有效性,是所有数据库必须解决的一个问题。另外,锁冲突也是影响数据库并发性能的一个重要因素,应用程序在选择锁类型时,需要根据实际运行的需要,选择最佳的锁类型锁类型Myisam和Memory引擎使用的是表级锁innodb引擎使用的是行级锁BDB引擎使用的是页级索锁解释行级锁:他直接锁住的是一条记录,开销大,加速慢,发生锁冲突...原创 2019-07-29 12:13:35 · 666 阅读 · 0 评论 -
【MySQL】begin ... end一直报错
在查询了资料后,mysql的begin end 只能使用在流程控制语句,游标,触发器,存储过程中原创 2019-07-26 16:44:34 · 6224 阅读 · 1 评论 -
【MySQL】事物日志
查看事物日志show engine innodb status查看日志文件设置状态showvaribales like 'innodb_%';innnodb_log_file_in_group中设置几组事物日志,默认是2;innodb_log_group_home_dir事物日志存放目录,不设置会存在数据库的默认文件目录下innodb存储引擎可将所有数据存...原创 2019-07-26 12:17:54 · 804 阅读 · 0 评论 -
【MySQL】事物认识
概念本事上是使用行级锁实现(排它锁,共享锁)事物处理可以确保非事物性单元内的所有操作都成功完成,否则不会永远更新面向数据的资源。通过将这一组相关操作组合成为一个要么全部成功要么全部失败的的单元,可以简化错误恢复病史应用程序更加可靠。一个逻辑单元要成为事物,必须满足所谓的acid属性属性原子性对于数据修改,要么全部都执行,要么全都不执行隔离性在所有的操作没有执行完毕之前,其他回话不能够...原创 2019-07-26 10:46:31 · 543 阅读 · 0 评论 -
【MySQL】物化视图
物化视图是相对于视图而言的,但是两者实际上并没有什么关系就如java/javaScript一样首先mysql的视图不是一种物化视图,他相当于一个虚拟表,本身并不存储数据,当sql在操作视图时所有数据都是从其他表中查询出来的。者带来的问题是使用视图并不能将常用数据分离出来,优化查询速度,切操作视图的很多命令和普通标一样,这回导致在业务中无法通过sql区分表和视图,使代码变得复杂。视图是简化设计,...原创 2019-07-25 18:10:31 · 9309 阅读 · 7 评论 -
【MySQL】使用pdo调用存储过程 --带参数输出
你先需要开启pdo的扩展C:\phpStudy\PHPTutorial\WWW\learn\db.php<?phprequire_once 'db.php';$db = new Db;$db->execute('set names utf8');//设置编码$sql = 'create procedure user_data3(out count int)begin ...原创 2019-07-24 18:27:23 · 1027 阅读 · 0 评论 -
【MySQL】pdo连接数据连接很慢
上图是使用pdo连接mysql时计算的连接时间,为什么会差距这么大最终的问题就是在这里,连接使用127.0.0.1速度嗖嗖的总结在使用PDO连接数据库主机地址使用IP而不是域名,使用域名会让PDO在连接之前进行一次不必要的dns lookup,当DNS缓存过于巨大的时候,这个问题可能会更严重。(即使是运行在本机,使用 127.0.0.1 而不是 localhost)这是一份pdo的一...原创 2019-07-24 16:14:45 · 1193 阅读 · 0 评论 -
【MySQL】游标查不出数据
这个问题在很多的案例中都没有注意这个事情这个问题的所在是在设置游标的时候需要设置别名原创 2019-07-24 13:11:13 · 1364 阅读 · 0 评论 -
【MySQL】游标的使用
这里的例子是仅在mysql中执行的,跟任何框架框架都没有关系游标的使用案例当前有三张表A、B、C其中A和B是一对多关系,B和C是一对多关系,现在需要将B中A表的主键存到C中;常规思路就是将B中查询出来然后通过一个update语句来更新C表就可以了,但是B表中有2000多条数据,难道要执行2000多次?显然是不现实的;最终找到写一个存储过程然后通过循环来更新C表,然而存储过程中的写法用...原创 2019-07-24 13:07:23 · 603 阅读 · 0 评论 -
【MySQL】使用存储过程计算1到100的累计和
create procedure kaka(out count int)begin declare v1 int(11) default 1; declare v2 int(11) default 0; while v1 < 100 do set v2 = v2 + v1; set v1 = v1 + 1; end while; set count = v2;end...原创 2019-07-24 11:38:05 · 16334 阅读 · 6 评论 -
【MySQL】存储过程
概念存储过程和函数可以理解为一段sql的集合,他们被事先编译好并且存储在数据库中。在pascal语言中,是有过程和函数的区别的,过程可以理解为没有返回值得函数。不过在C语言总,则没有过程这个概念,统一为函数创建存储过程create procedure 存储过程名(参数列表)begin存储过程体endcreate procedure user_data()beginselec...原创 2019-07-23 18:48:26 · 662 阅读 · 0 评论 -
【MySQL】触发器
什么是触发器在MySQL中触发器就类似于laravel中模型观察者事件,就是在执行一个操作时会执行设置的触发器内容触发器的使用场景1.可以做数据的同步备份(主表更新后触发备份表)2.可以做统计使用创建触发器create trigger [触发器名称] [触发器的执行时间] [执行的动作点] on [表名] for each row [函数 或者动作]create TRIGGER...原创 2019-07-23 16:52:04 · 584 阅读 · 0 评论 -
【MySQL】行转列
文章目录创建数据表添加测试数据数据库数据显示行转列实现效果在日常开发的过程中,我们时长会遇到这样的数据库结构这种结构在框架开发可以使用一对多进行直接查询,但是我们可以使用行转列来实现创建数据表CREATE TABLE TABLE_A ( NAME VARCHAR2(20), SUBJECT VARCHAR2(20), SCORE NUMBER(22,0)); ...原创 2019-07-23 11:48:24 · 611 阅读 · 0 评论 -
【Mysql】视图
视图概念1.视图实在mysql5.0.1版本中加入的功能,它可以理解为一个虚拟表。2.之所以被称为一个虚拟表,是因为它只存储了一个数据结构,并不存储真实地数据。他的数据是在查询过程中动态生成的3.还有一个重点就是视图并起不到优化的作用。创建视图create view view_user_data as select id,name from users;查看视图可以使用desc ...原创 2019-07-12 00:02:58 · 708 阅读 · 0 评论