mysql笔记整理 作者:python技术人 博客:https://www.cnblogs.com/lpdeboke Windows服务 -- 启动MySQL net start mysql -- 创建Windows服务 sc create mysql binPath= mysqld_bin_path(注意:等号与值之间有空格) 连接与断开服务器 mysql -h 地址 -P 端口 -u 用户名 -p 密码 show processlist -- 显示哪些线程正在运行 show variable…
笔记记录自林晓斌(丁奇)老师的<MySQL实战45讲> 7) --行锁功能:怎么减少行锁对性能的影响? MySQL的行锁是在引擎层由各个引擎自己实现的.因此,并不是所有的引擎都支持行锁,如MyISAM引擎就不支持行锁.对于不支持行锁的引擎,只能使用表锁来进行并发控制.对于这种引擎的表,同一张表上任何时刻只能有一个更新在执行,这就会影响到业务并发度.InnoDB是支持行锁的,这也是MyISAM被它替代的一个重要原因. 顾名思义,行锁就是针对数据表中行记录的锁.比如事务A要更新某一行,同时事务B也…
笔记记录自林晓斌(丁奇)老师的<MySQL实战45讲> 6) --全局锁和表锁:给表加个字段怎么有这么多阻碍 数据库锁设计的初衷是处理并发问题.作为多用户共享的资源,当出现并发访问的时候,数据库需要合理地控制资源的访问规则.而锁就是用来实现这些访问规则的重要结构.根据加锁的范围,MySQL里面的锁大致可以分为全局锁,表级锁和行锁三类.这篇笔记主要包含全局锁和表级锁.行锁的内容会在之后再进行分享. 全局锁: 全局锁就是对整个数据库实例加锁.可以通过命令 Flush tables with rea…
最近在学习林晓斌(丁奇)老师的<MySQL实战45讲>,受益匪浅,做一些笔记整理一下,帮助学习.如果有小伙伴感兴趣的话推荐原版课程,很不错. 1) --基础架构,一条SQL查询语句如何执行 MySQL大体来说可以分为Server层和存储引擎层两部分. Server层包括:连接器,查询缓存,分析器,优化器,执行器等,涵盖MySQL的大多数核心服务功能,以及所有的内置函数(如日期,时间,数学和加密函数等),所有跨存储引擎的功能在这一层实现,比如实现存储过程,触发器,视图等. 存储引擎层:负责数据的…
笔记记录自林晓斌(丁奇)老师的<MySQL实战45讲> (本篇内图片均来自丁奇老师的讲解,如有侵权,请联系我删除) 20) --幻读是什么,幻读有什么问题? 我们先来看看表结构和初始化数据: CREATE TABLE `t` ( `id` int(11) NOT NULL, `c` int(11) DEFAULT NULL, `d` int(11) DEFAULT NULL, PRIMARY KEY (`id`), KEY `c` (`c`) ) ENGINE=InnoDB; insert i…
笔记记录自林晓斌(丁奇)老师的<MySQL实战45讲> (本篇内图片均来自丁奇老师的讲解,如有侵权,请联系我删除) 9) --普通索引和唯一索引,应该怎么选择? 假如你在维护一个市民系统,每个人都有唯一的身份证号,而且业务代码也已经保证了不会写入两个相同的身份证号.如果需要按身份证号来查找,你可能会执行类似这样的SQL语句: select name from CUser where id_card = 'xxxxxxxxyyyyyzzz'; 由于身份证号id_card字段较长,不建议将身份证号…
笔记记录自林晓斌(丁奇)老师的<MySQL实战45讲> (本篇内图片均来自丁奇老师的讲解,如有侵权,请联系我删除) 16) --“order by”是怎么工作的? 在林老师的课程中,第15讲是前面问题的答疑,我打算最后将答疑问题统一整理出来,所以就继续这些内容的笔记了. 全字段排序: 假设有一个表是这么设计的: CREATE TABLE `t` ( `id` int(11) NOT NULL, `city` varchar(16) NOT NULL, `name` varchar(16) NO…
笔记记录自林晓斌(丁奇)老师的<MySQL实战45讲> (本篇内图片均来自丁奇老师的讲解,如有侵权,请联系我删除) 19) --为什么我只查一行的语句,也执行这么慢? 需要说明一下,如果MySQL数据库本身就有很大的压力,导致数据库服务器CPU占用率很高或ioutil(IO利用率)很高,这种情况下所有的语句执行都有可能变慢,不属于我们今天的讨论范围.为了便于描述,我们构造一个表,基于这个表来说明问题.这个表有两个字段id和c,并且我们事先插入了10万行记录. mysql> CREATE…
笔记记录自林晓斌(丁奇)老师的<MySQL实战45讲> (本篇内图片均来自丁奇老师的讲解,如有侵权,请联系我删除) 18) --为什么这些SQL语句逻辑相同,性能却差异巨大? 本篇我们以三个例子来记录. 案例一:条件字段函数操作 mysql> CREATE TABLE `tradelog` ( `id` int(11) NOT NULL, `tradeid` varchar(32) DEFAULT NULL, `operator` int(11) DEFAULT NULL, `t_mod…
笔记记录自林晓斌(丁奇)老师的<MySQL实战45讲> (本篇内图片均来自丁奇老师的讲解,如有侵权,请联系我删除) 13) --为什么数据表删掉一半,表文件大小不变? 我们还是以MySQL中应用最广泛的InnoDB引擎为基础来展开讨论.一个表中包含两部分:表结构定义和数据.在MySQL8.0版本以前,表结构是以.frm为后缀的文件存储的.而在MySQL8.0版本,已经允许把表结构定义放在系统数据表中了.因为表结构定义占用的空间很小,索引我们今天主要讨论的是表数据. 参数innodb_file_…
笔记记录自林晓斌(丁奇)老师的<MySQL实战45讲> (本篇内图片均来自丁奇老师的讲解,如有侵权,请联系我删除) 8.a) --事务到底是隔离还是不隔离的? 本周工作较忙,加上懒惰,拖更了,抱歉. 接上文,分析下事务A的返回结果,为什么k=1.这里我们做如下假设: 事务A开始前,系统里面只有一个活跃事务,其ID是99 事务A,B, C的版本号分别是100,101,102,且当前系统里面只有四个事务. 三个事务开始前,(1,1)这一行数据的row trx_id是90 这样,事务A的视图数组就是…
笔记记录自林晓斌(丁奇)老师的<MySQL实战45讲> 8.a) --事务到底是隔离还是不隔离的? 这部分内容不太容易理解,笔者也是进行了多次阅读.因此引用原文: 之前有提到过,如果是在可重复读隔离级别,事务T启动的时候会创建一个视图read-view,之后事务T执行期间,即使有其他事务修改了数据,事务T看到的仍然跟在启动时看到的一样,也就是说,一个在可重复读隔离级别下执行的事务,好像与世无争,不受外界影响. 但是,在之前也行锁相关内容时又提到,一个事务要更新一行,如果刚好有另外一个事务拥有这…
笔记记录自林晓斌(丁奇)老师的<MySQL实战45讲> 4) --深入浅出索引(上) 一句话简单来说,索引的出现其实就是为了提高数据查询的效率,就像书的目录一样. 索引的常见模型 哈希表:哈希表是一种以Key-Value存储数据的结构,只要输入key,就可以找到对应的value.哈希的思路很简单, 把值放在数组里,有一个哈希函数把key换算成一个确定的位置,然后把value放在数组的这个位置.不可避免地多个key值经过hash计算可能会出现同一个值,处理这种情况的一种方法是,拉出一个链表.查找…
笔记记录自林晓斌(丁奇)老师的<MySQL实战45讲> 3) --事务隔离,为什么你改了我还看不见? 简单来说,事务就是要保证一组数据操作,要么全部成功,要么全部失败.在MySQL中,事务支持是在引擎层实现的.但并不是所有的引擎都支持事务,这也是MyISAM被InnoDB取代的重要原因之一. 本篇内容均是在InnoDB下讨论. 提到事务,总免不了ACID(Atomicity,Consistency,Isolation,Durability),(原子性,一致性,隔离性,持久性),本篇主要讨论的是…
笔记记录自林晓斌(丁奇)老师的<MySQL实战45讲> (本篇内图片均来自丁奇老师的讲解,如有侵权,请联系我删除) 17) --如何正确地显示随机消息? 如果有这么一个英语单词表,需要每次访问时随机显示三个单词.但实际使用中发现,随着单词表越变越大,选单词这个逻辑变得越来越慢.建表语句如下: mysql> CREATE TABLE `words` ( `id` int(11) NOT NULL AUTO_INCREMENT, `word` varchar(64) DEFAULT NULL…
笔记记录自林晓斌(丁奇)老师的<MySQL实战45讲> (本篇内图片均来自丁奇老师的讲解,如有侵权,请联系我删除) 14) --count(*)这么慢,我该怎么办? 有时你会发现,随着系统中记录数越来越多,select count(*) from t执行得也越来越慢.那么今天,我们就来聊聊count(*)语句到底是怎样实现的,以及MySQL为什么会这么实现. count(*)的实现方式: 前面我们提到过,MySQL的引擎是插件式的,这里要明确一点,在不同的MySQL引擎中,count(*)有不…
笔记记录自林晓斌(丁奇)老师的<MySQL实战45讲> (本篇内图片均来自丁奇老师的讲解,如有侵权,请联系我删除) 12) --为什么我的MySQL会“抖”一下? 断更了一段时间,因为这几周实在是太忙了,周末加班两天那种... 有时你会遇到这样的问题,一条SQL语句,正常执行的时候很快,但是有时候会变得特别慢.并且这种场景很难复现,不只随机而且持续时间很短.这其实与MySQL的脏页以及它的刷新机制有关.之前我们有过一个关于<孔乙己>里面酒馆老板记账的比喻.在这个比喻里,掌柜的账本就…
笔记记录自林晓斌(丁奇)老师的<MySQL实战45讲> (本篇内图片均来自丁奇老师的讲解,如有侵权,请联系我删除) 11) --怎么给字符串字段加索引? 日常工作中的登录系统,你很可能会使用emai这个字段.因此也很容易遇到类似这样的语句: mysql> select *from user where email = 'xxx'; 我们知道,如果没有索引那就只能使用全表扫描.并且MySQL是支持前缀索引的,也就是说,你可以顶一个字符串的一部分作为索引.默认地,如果你创建索引的语句不指定前…
笔记记录自林晓斌(丁奇)老师的<MySQL实战45讲> (本篇内图片均来自丁奇老师的讲解,如有侵权,请联系我删除) 10) --MySQL为什么有时会选错索引? MySQL中的一张表上可以支持多个索引的,但是,往往你写SQL语句的时候不会去主动指定使用哪个索引.也就是说,使用哪个索引是由MySQL来确定的.而MySQL有时会选择不恰当的索引,我们举一个例子来说明这种情况. CREATE TABLE `t` ( `id` ) NOT NULL, `a` ) DEFAULT NULL, `b` )…
笔记记录自林晓斌(丁奇)老师的<MySQL实战45讲> 5) --深入浅出索引(下) 这次的笔记从一个简单的查询开始: 建表语句是这样的 mysql> create table T ( ID int primary key, k , s ) NOT NULL DEFAULT '', index k(k)) engine=InnoDB; ,, ,,,,,,,,,,'gg'); 如果要执行 select * from T where k between 3 and 5这条语句,需要执行几次搜…
笔记记录自林晓斌(丁奇)老师的<MySQL实战45讲> 2) --日志系统,一条SQL查询语句如何执行 MySQL可以恢复到半个月内任意一秒的状态,它的实现和日志系统有关.上一篇中记录了一条查询语句是如何执行的,对于更新语句,这一套流程也是同样会走一遍.与查询流程不一样的是,更新流程还涉及到两个重要的日志模块.redo log(重做日志) 和 binlog(归档日志). redo log: 这里林老师举了一个很好的例子,摘录如下. <孔乙己>中的酒店掌柜有一个粉板,用来记录客人的赊…
删除整个表 TRUNCATE TABLE 表名; 持久链接 自动提交…
极客时间 Mysql实战45讲 07讲行锁功过:怎么减少行锁对性能的影响笔记 极客时间极客时间 Mysql实战45讲 07讲行锁功过:怎么减少行锁对性能的影响笔记 极客时间 笔记体会: 方案一,事务相对较长,则占用锁的时间较长,会导致其他客户端等待资源时间较长.方案二,串行化执行,将相对长的事务分成多次相对短的事务,则每次事务占用锁的时间相对较短,其他客户端在等待相应资源的时间也较短.这样的操作,同时也意味着将资源分片使用(每次执行使用不同片段的资源),可以提高并发性.方案三,人为自己制造锁竞争…
原文地址: https://shockerli.net/post/1000-line-mysql-note/ /* 启动MySQL */ net start mysql /* 连接与断开服务器 */ mysql -h 地址 -P 端口 -u 用户名 -p 密码 /* 跳过权限验证登录MySQL */ mysqld --skip-grant-tables -- 修改root密码 密码加密函数password() update mysql.user set password=password('ro…
原文地址:https://shockerli.net/post/1000-line-mysql-note/ /* Windows服务 */ -- 启动MySQL net start mysql -- 创建Windows服务 sc create mysql binPath= mysqld_bin_path(注意:等号与值之间有空格) /* 连接与断开服务器 */ mysql -h 地址 -P 端口 -u 用户名 -p 密码 SHOW PROCESSLIST -- 显示哪些线程正在运行 SHOW V…
目录 (1) str_to_date (2) 递归查询 (3) 排序问题 (4) 条件函数 (5) 列转行函数 (6) find_int_set (7) 类型转换函数 (8) 合并更新 继上一篇博客<Oracle学习笔记整理手册>之后,我再写一篇Mysql版本的 PS:本博客收录自己工作中遇到学到的一些mysql技能,有时间就更新整理一下 (1) str_to_date oracle有to_date函数,Mysql的格式是str_to_date('2019-02-12 11:34:32', '…
/*mysql学习笔记整理*/ /*常用的数据库操作对象*/ #库的操作#创建#数据库的创建USE mysql;CREATE DATABASE db_x;#删除#删除数据库DROP DATABASE db_x;#删除数据库#查看SHOW DATABASES;#查看数据库#备份和还原#备份|还原数据库mysqldump -u root -p {mysql|--all-DATABASE|--database}[><]{DIRECTORY} #表的操作#创建#表格的创建CREATE TABLE tb…
原文地址:http://blog.csdn.net/mysteryhaohao/article/details/51669741 锁,在现实生活中是为我们想要隐藏于外界所使用的一种工具.在计算机中,是协调多个进程或线程并发访问某一资源的一种机制.在数据库当中,除了传统的计算资源(CPU.RAM.I/O等等)的争用之外,数据也是一种供许多用户共享访问的资源.如何保证数据并发访问的一致性.有效性,是所有数据库必须解决的一个问题,锁的冲突也是影响数据库并发访问性能的一个重要因素.从这一角度来说,锁对于…
一.背景 MySQL有两种类型的锁:lock(锁)和latch(闩锁): 类型 lock latch 对象 事务 线程 保护 数据库内容 内存数据结构 持续时间 整个事务 临界资源 模式 行锁.表锁.意向锁 读写锁.互斥量 死锁 通过等待图和超时机制进行死锁检测和处理(deadlock detection through waits-for graph, timeout machanism) 无死锁检测和处理机制,仅通过应用程序加锁的顺序保证无死锁的情况发生 存在于 锁定管理器的哈希表(Lock…
1.前言 我们都知道在并发的情况下,修改数据时需要添加锁,但是却对数据库锁的工作原理不甚理解,不知道锁的运行机制,也就对数据的安全性无法明白.本章记录MySQL中锁的相关知识. 2.什么是锁 锁是数据库系统区别与文件系统的一个关键特性,用于管理对共享资源的并发访问.InnoDB提供了行级别的锁,在数据库内部其他地方也使用了锁.例如:操作LRU列表,为了保证数据一致性就必须有锁了. 另一方面,不同的数据库有不同的锁实现方式,SQL语法层确实标准的,所以对锁的认识局限于数据库.对于MyISAM引擎,…