MySQL
程序员掉头发
这个作者很懒,什么都没留下…
展开
-
MySQL 基于like的模糊查询 并根据查询的匹配度排序
项目里有一个新的需求,在检索处原先只有根据各个字段的模糊查询,按照我项目中的例子是 中文名,英文名以及负责人。那么有时候在匹配的字段很多的情况下,如果只输入’ms’(数据库中刚好有这样的英文名) 这个正好匹配的字段原则上要显示在第一列,或者说匹配程度约好的要显示在越前面,而不仅仅是一连串的返回匹配到的结果而已。查询结果又10多页,那个提需求的老哥 我能感受到它的痛苦。case 表达式那么言归正传,主要就是对order by部分进行匹配度的计算,这里需要用到 case when 表达式 因为我需要匹配好几原创 2020-10-28 16:55:37 · 1632 阅读 · 0 评论 -
MySQL 面试必问之---分库分表
转载https://mp.weixin.qq.com/s/NDwUlMt7BLEabk3rgQpKawhttps://mp.weixin.qq.com/s/wDPbpy-gA36W__ThKVBBqQ前言当数据库的数据量过大,大到一定的程度,我们就可以进行分库分表。那么基于什么原则,什么方法进行拆分,这就是本篇所要讲的。1.数据库瓶颈不管是 IO 瓶颈还是 CPU 瓶颈,最终都会导致数据库的活跃连接数增加,进而逼近甚至达到数据库可承载的活跃连接数的阈值。在业务 Service 来看, 就是.转载 2020-10-03 13:06:36 · 460 阅读 · 0 评论 -
MySQL 必须掌握的三大日志-binglog、redo log以及undo log
转载自https://mp.weixin.qq.com/s/A0Du0ipee7nzXN-fKG6K5g前言MySQL服务器的体系结构一条更新语句执行的顺序update T set c=c+1 where ID=2;a. 执行器先找引擎取 ID=2 这一行。ID 是主键,引擎直接用树搜索找到这一行。如果 ID=2 这一行所在的数据页本来就在内存中,就直接返回给执行器;否则,需要先从磁盘读入内存,然后再返回。b. 执行器拿到引擎给的行数据,把这个值加上 1,比如原来是 N,现在就是 N+1,.转载 2020-10-02 21:42:23 · 6675 阅读 · 1 评论 -
MySQL 表存储方式之索引组织表和堆表
索引组织表(Index-Organized Tables)索引组织的表具有B树的变体的存储组织。以主键排序的方式将索引组织表的数据存储在B树索引结构中。索引结构中的每个叶块都存储关键字列和非关键列。对应的主键索引也叫聚集索引,其他列的索引叫secondary index,也叫做二级索引。二级索引的每条记录都包含该行的主键值,InnoDB使用这个主键值来搜索聚集索引中的行。因此,较短的主键值是有利的,可以缩小二级索引的空间。聚集索引 clustered index每个表都有一个聚集索引,其实上面所说的主原创 2020-09-21 20:34:54 · 864 阅读 · 0 评论 -
MySQL 为什么InnoDB要使用B+ Tree索引
前言一般来说,索引本身也很大,不可能全部存储在内存中,因此索引往往以索引文件的形式存储的磁盘上。这样的话,索引查找过程中就要产生磁盘I/O消耗,相对于内存存取,I/O存取的消耗要高几个数量级**,所以评价一个数据结构作为索引的优劣最重要的指标就是在查找过程中磁盘I/O操作次数的渐进复杂度。**换句话说,索引的结构组织要尽量减少查找过程中磁盘I/O的存取次数。一.内存读取简单点说说内存读取,内存是由一系列的存储单元组成的,每个存储单元存储固定大小的数据,且有一个唯一地址。当需要读内存时,将地址信号放到地原创 2020-09-21 19:48:10 · 448 阅读 · 0 评论 -
MySQL 插入时间时不是用的默认缺省值而是NULL,且后续更新不会改变时间。
项目中有一个bug,明明MySQL中update_time的缺省值为CURRENT_TIMESTAMP,但是第一次插入的时候总是为NULL,后续也不会更新。问题一:初始插入时 时间字段为null但是初始的时候为什么为NULL呢?因为项目中后端用到了Django 的ORM框架,其中的model模型定义如下在DateTimeField中参数设置blank为True,null为True关于这两个字段详细的介绍可以参考django数据模型中null和blank的区别说明我这里总结一下:null默认原创 2020-09-17 14:26:02 · 1975 阅读 · 0 评论 -
MySQL 什么时候使用INNER JOIN 或 LEFT JOIN
在本科时期,其实这个问题困扰了我很久,最早都是用如下语句,也就是笛卡尔积的形式。select **from A,Bwhere A.name=B.name再熟悉了各种联表以后其实这就是cross join,是最慢的一种联表方式,会返回A表字段的数据*B表字段的数据(如果A表有10条数据,B表有20条数据,那么最后返回结果就是200条)。其实可以根据真实的需求用更好的联表操作,如left join 或inner join。红烧排骨饭博客中给出的例子很容易理解商品表CREATE TABLE pr原创 2020-09-07 18:11:25 · 3022 阅读 · 2 评论 -
Mysql 从A表查询相关信息批量插入到B表中
还是太菜了,在接到相关需求的时候,我连insert命令都没记全。回顾一下insert命令insert into 表名 (表内字段1,字段2) values(数据1,数据2),(数据1’ ,数据2’)那么按照标题中的需求,具体例子:将A表中有,而B表中没有的用户插入到B表中。所以就是先用一个获取A表中有而B表中没有的用户(这里用到子查询not in),在将这些用户插入到B表中。insert into B(name)select usernamefrom Awhere username not原创 2020-08-26 16:06:04 · 1144 阅读 · 0 评论 -
MySQL多表连接时想要用group by去重
自己在实习的时候编写接口时遇到了这个问题,写完如下sql查询语句后,执行select d.score, c.`desc`, c.idFROM baseline_project.baseline_project_new_check AS c LEFT JOIN baseline_project.baseline_project_new_exp AS e ON c.code_new_en_name = e.code_new_en_name AND c.version_identify原创 2020-08-20 16:18:53 · 2714 阅读 · 0 评论 -
Mysql 事务基本概念及MVCC
一、事务基本概念在Mysql中只有InnoDB支持事务,支持原子性InnoDB引擎默认自动提交事务,也可以设置取消自动提交,如:设置AUTOCOMMIT为0;通过start transaction或begin开启一个事务,然后使用rollback或者commit 结束这个事务。因为InnoDB默认会自动产生事务并提交,所以每次执行一个语句都会commit,严重影响了性能。所以可以用begin开启事务。1.事务id的分配时机这里要注意在默认情况下,只有执行修改操作(如INSERT、DELETE、原创 2020-05-24 19:44:10 · 258 阅读 · 0 评论 -
Mysql 行锁、间隙锁和next-key锁详解
Mysql的锁机制Mysql 四种事务隔离级别Mysql MVCC实现机制Mysql中的几种行锁(间隙锁、next-key锁)原创 2020-05-24 23:55:37 · 10296 阅读 · 7 评论 -
Mysql Explain使用详解
再用到Mysql优化时,经常会使用explain 分析查询,这里分享一篇非常详细的文章作者:陆炫志出处:xuanzhi的博客http://www.cnblogs.com/xuanzhi201111在日常工作中,我们会有时会开慢查询去记录一些执行时间比较久的SQL语句,找出这些SQL语句并不意味着完事了,些时我们常常用到explain这个命令来查看一个这些SQL语句的执行计划,查看该SQL语句有没有使用上了索引,有没有做全表扫描,这都可以通过explain命令来查看。所以我们深入了解MySQL的基于转载 2020-05-23 11:02:32 · 105 阅读 · 0 评论 -
Mysql 回表查询和覆盖索引概念
最近在补Mysql基础时,发现很多判断查询语句是否优化时都通过回表查询等术语作为指标,看的很懵逼,就开始查找相关的文献,这时发现了一篇很通俗易懂的文章zhangdeTalk的博客 《MySQL 的覆盖索引与回表》一、回表查询因为InnoDB具有聚簇索引(主键索引)和二级索引(普通索引),且两种索引叶子节点存放的内容不一样,前者存储了所有的行数据,而后者仅仅存储主键的数据。MyISAM的索引叶子节点存储得是行记录的指针那么从普通索引是无法直接定位到行记录的,先扫描一遍普通索引获得主键值后在扫描聚簇索引转载 2020-05-23 10:58:46 · 669 阅读 · 0 评论 -
Mysql exits和in的区别
使用exits和in查询的结果都相同,但是其中运行的机制并不一样。举例:返回参加考试的人1.exitsSELECT * FROM people WHERE EXISTS(SELECT 1 FROM test WHERE people.id=test.user_id);这里exits子查询中 select 1 其实这个1可以是任何数字,因为在exits中返回的结果并不重要,重要的是此处用的是索引查询,判断是否有符合要求的结果,原创 2020-05-22 23:29:06 · 982 阅读 · 0 评论 -
Mysql 的索引总结
本文内容来自知乎专栏,对其中的知识点进行摘录,方便日后查阅。https://zhuanlan.zhihu.com/p/29118331一、索引概念和原理概念: 索引是一种特殊的文件(InnoDB数据表上的索引是表空间的一个组成部分),它们包含着对数据表里所有记录的引用指针。概念来源:http://feiyan.info/16.html原理: 提高查询效率,相当于一本书的目录,帮助查询内容。二、索引的优缺点优点:索引大大减小了服务器需要扫描的数据量索引可以帮助服务器避免排序和临时表.转载 2020-05-22 19:12:55 · 155 阅读 · 0 评论 -
Mysql 多表连接中on 和where的区别详解!
数据库在通过连接多表返回记录时,会先生成一张临时表,然后在将这张临时表返回。对于Left Joinon和where条件的区别on条件是生成临时表时的条件,无论on的条件是否为真,左表的数据都会返回,只是右表数据这是都会变成null,这是Left Join的特性(Right Join同)where是在临时表创建完后根据条件进行筛选对于Inner Join两者并没有区别,因为Inner Join不像Left Join或Right Join一定要返回左表/右表的所有数据,而是根据指定关系进行表连接原创 2020-05-21 01:01:21 · 1888 阅读 · 0 评论 -
Mysql 数据类型详解
1.DecimalDECIMAL(N,D)N:总共的位数D:小数点后的位数create table items(price DECIMAL(5,2));INSERT INTO items(price) VALUES(8);INSERT INTO items(price) VALUES(8342342);INSERT INTO items(price) VALUES(8.2);INSERT INTO items(price) VALUES(8.12412);INSERT INTO items原创 2020-05-17 20:45:16 · 198 阅读 · 0 评论 -
Mysql 聚合函数
1.COUNT统计个数,如果数据相同也会重复计数。mysql> SELECT COUNT(author_fname) FROM books;+---------------------+| COUNT(author_fname) |+---------------------+| 19 |+---------------------+mysql> SELECT COUNT(DISTINCT(author_fname)) FROM books;原创 2020-05-16 15:24:59 · 138 阅读 · 0 评论 -
Mysql 查询语句中的distinct,order by,limit和like等命令
1.DISTINCT去除重复的元素**********例1:去除全名重复的作者**********mysql> select author_lname,author_fname from books;+----------------+--------------+| author_lname | author_fname |+----------------+--------------+| Lahiri | Jhumpa || Gaiman原创 2020-05-16 11:49:38 · 584 阅读 · 0 评论 -
Mysql String函数的用法
一、substring语法select substring(string,start_index,end_index);表示取从start_index开始(包括这个数)到end_index(包括这个数)的字符串。注: Mysql中的下标是从1开始的,而非0mysql> select substring("hello world",1,5);+------------------------------+| substring("hello world",1,5) |+----------原创 2020-05-15 22:23:27 · 1319 阅读 · 0 评论 -
MYSQL concat命令
concat 本身是用来连接两个字符串的concat_ws(分界符,“”,“”,“”…) 用分节符来连接字符串SELECT concat(author_fname,' ',author_lname) FROM books;+----------------------+| full_name |+----------------------+| Jhumpa Lahiri || Neil Gaiman || Neil Gaiman原创 2020-05-11 22:06:36 · 248 阅读 · 0 评论 -
mac中 MySQL的常用命令
对mysql的环境配置这里就不说了…1.MySQL登陆mysql -u root -p输入密码:2.数据库的显示,创建,删除和使用-----------------显示数据库mysql>show databases----------------创建数据库mysql>create database 库名----------------删除数据库mysql>d...原创 2020-03-01 20:56:05 · 307 阅读 · 0 评论