mysql
文章平均质量分 85
桐花思雨
这个作者很懒,什么都没留下…
展开
-
MySQL联合索引之索引失效与否
如果列是字符型的话它的比较规则是先比较字符串的第一个字符,第一个字符小的哪个字符串就比较小,如果两个字符串第一个字符相同,那就再比较第二个字符,第二个字符比较小的那个字符串就比较小,依次类推,比较字符串。,它指的是:它是索引上的范围查询,它会在索引上扫描特定范围内的值。是字符类型,那么前缀匹配用的是索引,后缀和中缀只能全表扫描了。这些没有从最左边开始,最后查询没有用到索引,都用的是全表扫描。如果左边的列是精确查找的,右边的列可以进行范围查找。是有序的,进行范围查找走的是联合索引。的记录后,可以根据条件。原创 2022-09-28 01:26:34 · 660 阅读 · 0 评论 -
Java业务系统是怎么和MySQL交互的
业务系统和 的交互概览要在 系统访问 ,得加个 驱动依赖,才能和 建立连接,然后执行 ,这段 配置中就引入了一个 驱动。就是 语言使用的 驱动访问 ,就得和 建立网络连接,而这就由 驱动负责,他会在底层和 服务器建立网络连接,有了这个连接,才能发送请求给 服务器...............原创 2022-06-12 22:20:57 · 716 阅读 · 0 评论 -
MySQL中的存储过程
从 版本开始支持存储过程,存储过程能够将复杂的 逻辑封装在一起,而应用程序无须关注存储过程内部复杂的 逻辑,而只需要简单地调用存储过程即可存储过程的英文是 。它的思想很简单,就是一组经过预先编译的 语句的封装执行过程:存储过程预先存储在 服务器上,需要执行的时候,客户端只需要向服务器端发出调用存储过程的命令,服务器端就可以把预先存储好的这一系列 语句全部执行....................................原创 2022-06-09 20:03:21 · 1435 阅读 · 1 评论 -
MySQL中的空值 Null 和空字符‘‘
目录1. 空值 `Null` 和空字符 `''`2. 在查询方式上的区别对比2.1. 创建 `SQL` 脚本1. 空值 Null 和空字符 ''日常开发中,一般都会涉及到数据库增删改查,那么不可避免会遇到 MySQL 中的 NULL 和空字符 '',二者表面上看都是空,其实存在一些差异的空值 NULL 的长度是 NULL,不确定占用了多少存储空间,它是占用存储空间的空字符串 '' 的长度是 0,是不占用空间的*通俗的讲:空字符串 '' 就像是一个真空状态的杯子,什么都没有;而空值 NULL 就原创 2022-05-20 19:08:10 · 8119 阅读 · 1 评论 -
MySQL中的时间函数
目录1. 获取系统当前时间1.1. 获取年月日时分秒1.2. 获取年月日1. 获取系统当前时间使用的 MySQL 版本为 5.7.361.1. 获取年月日时分秒SELECT NOW(),CURRENT_TIMESTAMP(),SYSDATE(),CURRENT_TIMESTAMP;CURRENT_TIMESTAMP(),CURRENT_TIMESTAMP 都是 NOW() 函数的同义词NOW() 在执行开始时值就得到了SYSDATE() 在函数执行时动态得到值,一般情况下很少用到1原创 2022-03-08 22:39:15 · 17419 阅读 · 4 评论 -
数据库事务的特性及其实现原理
目录认识事务什么是数据库事务为什么需要数据库事务认识事务什么是数据库事务事务是访问数据库的程序执行单元;事务中可能包含一个或多个 SQL 语句,这些语句要么都执行,要么都不执行事务的定义有几点需要解释下数据库事务可以包含一个或多个SQL 语句,这些操作构成一个逻辑上的整体构成逻辑整体的这些数据库操作,要么全部执行成功,要么全部不执行构成事务的所有操作,要么全都对数据库产生影响,要么全都不产生影响,即不管事务是否执行成功,数据库总能保持一致性状态以上即使在数据库出现故障以及并发事务存在的情况原创 2022-03-02 16:32:56 · 1397 阅读 · 0 评论 -
SQL查找是否存在,别再count了
目录前言目前多数人的写法优化方案前言根据某一条件从数据库表中查询『有』与『没有』,只有两种状态,那为什么在写 SQL 的时候,还要 select count(*) 呢?目前多数人的写法业务代码中,需要根据一个或多个条件,查询是否存在记录,不关心有多少条记录。普遍的 SQL 及代码写法如下SELECT count(*) FROM table WHERE a = 1 AND b = 2int nums = xxDao.countXxxxByXxx(params);if ( nums > 0原创 2022-02-28 15:45:04 · 372 阅读 · 0 评论 -
再谈MySQL之执行计划Explain
目录前言`Explain` 各个字段及其含义前言我们经常会使用 Explain 去查看执行计划,这个众所周知。但在面试时问面试者,你用 Explain 主要是看什么?对方的回答大多是查看是否有使用到索引,这显然不是最好的答案Explain 各个字段及其含义id : 表示 SQL 执行的顺序的标识, SQL 从大到小的执行select_type:表示查询中每个 select 子句的类型table:显示这一行的数据是关于哪张表的,有时不是真实的表名字type:表示 mysql 在表中找到所需行的原创 2022-02-13 18:22:21 · 623 阅读 · 0 评论 -
MySQL之前缀索引
目录什么是前缀索引什么是索引选择性什么是前缀索引所谓前缀索引:说白了就是对文本的前几个字符建立索引(具体是几个字符在建立索引时指定),这样建立起来的索引更小,所以查询更快。这有点类似于 Oracle 中对字段使用 Left 函数来建立函数索引,只不过 MySQL 的这个前缀索引在查询时是内部自动完成匹配的,并不需要使用 Left 函数那么为什么不对整个字段建立索引呢?一般来说使用前缀索引,可能都是因为整个字段的数据量太大,没有必要针对整个字段建立索引,前缀索引仅仅是选择一个字段的部分字符作为索引,这样原创 2022-02-11 16:46:44 · 6802 阅读 · 1 评论 -
使用JDBC连接数据库
目录`JDBC` 简介`JDBC` 中常用类和接口驱动程序管理类 `DriverManager`JDBC 简介JDBC 全称为:Java DataBase Connectivity (Java 数据库连接),可以为多种数据库提供填统一的访问。JDBC 是 sun 开发的一套数据库访问编程接口,是一种 SQL 级的 API。它是由 Java 语言编写完成,所以具有很好的跨平台特性,使用 JDBC 编写的数据库应用程序可以在任何支持 Java 的平台上运行,而不必在不同的平台上编写不同的应用程序,利用 J原创 2022-02-02 18:01:41 · 1605 阅读 · 0 评论 -
MySQL中的LIKE查询能否用的到索引
目录前言索引单值索引前言常常听说,mysql 中的 like 要慎用,因为会全表扫描,对于这句话不是很理解,只能强加记忆。这篇文章我们来一探究竟,了解 like 为什么要慎用,以及为什么会全表扫描索引我们从单值索引和联合索引两个方面来讨论单值索引数据库 SQL 脚本如下CREATE TABLE `user` ( `id` int(11) unsigned NOT NULL AUTO_INCREMENT, `username` varchar(255) COLLATE utf8mb4_u原创 2022-01-22 19:20:13 · 7957 阅读 · 0 评论 -
再谈MySQL数据库之索引,联合索引,覆盖索引
目录索引是什么索引是什么索引:是为了快速对数据库数据检索的一种数据结构,是 B+ Tree 的数据结构。B+ Tree 长什么样?那你得先明白什么是 B- Tree,来看如下一张图左边是 B- Tree,右边是 B+ Tree,两者的区别在于B- Tree 中,所有节点都会带有指向具体记录的指针;B+ Tree 中只有叶子节点会带有指向具体记录的指针B- Tree 中不同的叶子节点之间没有连在一起;B+ Tree 中所有的叶子节点通过指针连接在一起B- Tree 中可能在非叶子节点就拿到了指原创 2022-01-16 11:59:03 · 1568 阅读 · 3 评论 -
MySQL中设置create_time和update_time默认值并实时更新
目录前言通过建表语句来指定通过 `navicat` 的可视化界面直接操作前言mysql 数据库有时候会给表中加上 create_time 和 update_time 这两个字段,这两个字段可以设置为 datetime 或 timestamp 类型,那么如何为其设置默认值并根据当前时间来更新呢?如何做到通过 mysql 数据库的设置来实现上述字段的自动化填充呢,而不用在 sql 语句中手动来填充呢。解决办法如下通过建表语句来指定CREATE TABLE `test` ( `text` var原创 2021-10-06 23:03:23 · 6572 阅读 · 1 评论 -
MySQL中的group by分组
目录前言`group by` 分组内幕数据准备`group by` 分组查询前言为什么不能够 select * from table_name group by name 为什么一定不能是 *,而是某一个列或者某个列的聚合函数,group by 多个字段可以怎么去很好的理解呢?group by 分组内幕数据准备建表语句如下CREATE TABLE `user_info` ( `id` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(255原创 2021-09-21 16:58:07 · 15634 阅读 · 6 评论 -
MySQL中order by的原理
目录示例表示例表以下面这张表为例,看一下 order by 的工作流程CREATE TABLE `user_info` ( `id` int(11) NOT NULL AUTO_INCREMENT, `city` varchar(16) NOT NULL, `name` varchar(16) NOT NULL, `age` int(11) NOT NULL, `addr` varchar(128) NOT NULL, PRIMARY KEY (`id`), KEY `ci原创 2021-09-20 17:42:13 · 1451 阅读 · 1 评论 -
MySQL索引之联合索引
目录联合索引联合索引的存储结构建表联合索引在平时开发中,我们最常见的是聚集索引,但在我们需要多条件查询的时候,就不得不建立联合索引,来提高我们的查询效率联合索引:也称复合索引,就是建立在多个字段上的索引。联合索引的数据结构依然是 B+ Tree一颗 B+ Tree 只能根据一个值来构建,所以联合索引使用 最左 的字段来构建 B+ Tree联合索引的存储结构建表CREATE TABLE `t1` ( `a` int(11) NOT NULL AUTO_INCREMENT, `b`原创 2021-09-11 22:46:54 · 28766 阅读 · 5 评论 -
MySQL中DateTime、Date、Time、TimeStamp区别
目录`Date、time、datetime、timestamp` 的区别`Date``DateTime``TimeStamp``Time`Date、time、datetime、timestamp 的区别Date名称解释显示格式YYYY-MM-DD显示范围1000-01-01 到 9999-12-31应用场景当业务需求中只需要精确到天时,可以用这个时间格式后台取值@JSONField(format=”yyyy-MM-dd”)DateTime名称解释显示格式YYYY-MM-DD HH:mm:ss显示范原创 2021-09-11 18:19:29 · 192 阅读 · 0 评论 -
MySQL中count(*)、count(1)和count(字段)的区别
目录`count(*)`、`count(1)` 和 `count(字段)` 区别`count(主键id)` 与 `count(1)``count(*)` 与 `count(字段)`count(*)、count(1) 和 count(字段) 区别count() 是一个聚合函数,对于返回的结果集,一行行地判断,如果 count 函数的参数不是 NULL,累计值就加 1,否则不加。最后返回累计值count(*)、count(主键id) 和 count(1) 都表示返回满足条件的结果集的总行数;而count原创 2021-08-30 10:35:55 · 3612 阅读 · 1 评论 -
数据库设计三大范式
数据库设计三大范式简述为了建立冗余较小,结构合理的数据库,设计数据库时必须遵循一定的规则。在关系型数据库中这种规则就称为范式。范式是符合某一种设计要求的总结。要想设计一个结构合理的关系型数据库,必须满足一定的范式。在实际开发中最为常见的设计范式下面有三个第一范式第一范式是最基本的范式:要求数据库表中的所有列都具有原子性,不可再分解只要数据库是关系型数据库(mysql/oracle/db2/sql server),就必须满足要求。数据库表的每一列都是不可分割的原子数据项,而不能是集合,数组,记录等非原原创 2021-03-24 22:49:35 · 159 阅读 · 0 评论 -
MySQL大数据量的分页查询优化
目录背景数据准备背景随着业务发展越来越快,原来的数据库数据从几万突破到几百万,分页的查询策略是否需要调整一下?数据准备1、表名:order_history2、描述:某个业务的订单历史表3、主要字段:unsigned int id,tinyint(4) int type4、字段情况:该表一共 37 个字段,不包含 text 等大型数据,最大为 varchar(500),id 字段为索引,且为递增5、数据量:57092946、MySQL 版本:5.7.16...原创 2021-08-16 13:50:55 · 1931 阅读 · 0 评论 -
MySQL 查询部门工资前三高的员工信息
要求:编写一个SQL,获取部门工资前三高的员工信息员工表和部门表结构:CREATE TABLE `employee` ( `id` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(255), `salary` decimal(10,2), `department_id` int(11), PRIMARY KEY (`id`)) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin;.原创 2020-09-14 22:34:42 · 4900 阅读 · 0 评论 -
MySQL中like,limit,union及union all查询
sql 语句中 like 的用法%:表示包含零个或多个字符的任意字符串like'Mc%' :将搜索以字母 Mc 开头的所有字符串(如 McBadden)like'%inger' :将搜索以字母 inger 结尾的所有字符串(如 Ringer、Stringer)like'%en%' :将搜索在任何位置包含字母 en 的所有字符串(如 Bennet、Green、McBadden)_ :表示任意单个字符like'_heryl' 将搜索以字母 heryl 结尾的所有二十六个字母的名称(如 Cher原创 2021-03-29 16:36:09 · 1546 阅读 · 2 评论 -
MySQL中in和exists区别
IN 和 EXISTS 区别在 mysql 的多表查询中,始终要遵循的一个原则:小表驱动大表的原则INin 查询相当于多个 or 条件的叠加,这个比较好理解,比如下面的查询select * from user where user_id in (1, 2, 3);等效于select * from user where user_id = 1 or user_id = 2 or user_id = 3;in 查询就是先将子查询条件的记录全都查出来,假设结果集为 B,共有 m 条记录,然后再将原创 2021-09-27 22:59:14 · 298 阅读 · 0 评论 -
JOIN查询流程与驱动表
什么是驱动表当进行多表连接查询时,驱动表的定义为:如果指定了连接条件时,满足查询条件的记录行数少的表为驱动表如果未指定连接条件时,那么行数少的表为驱动表也可以通过 EXPLAIN 查看 SQL 语句的执行计划可以判断谁是驱动表,EXPLAIN 语句分析出来的第一行的表即是驱动表mysql 为什么要用小表驱动大表的原则mysql 表关联的算法是 Nest Loop Join,是通过驱动表的结果集作为循环基础数据,然后一条一条地通过该结果集中的数据作为过滤条件到下一个表中查询数据,然后合并结果原创 2021-03-24 22:29:20 · 1299 阅读 · 0 评论 -
MySQL的条件判断函数
建表 sql 如下SET NAMES utf8mb4;SET FOREIGN_KEY_CHECKS = 0;-- ------------------------------ Table structure for score-- ----------------------------DROP TABLE IF EXISTS `score`;CREATE TABLE `score` ( `id` int(11) NOT NULL AUTO_INCREMENT, `name` va原创 2021-03-24 23:28:48 · 9431 阅读 · 0 评论 -
MySQL去除重复的数据
一、单个字段的操作 这是数据库中的表: 分组介绍: Select 重复字段 From 表 Group By 重复字段 Having Count(*)>1 查看是否有重复的数据: GROUP BY <列名序列> HAVING <组条件表达式> 查询出:根据dname分组,同时满足having字句中组条件表达式(重复次数大于1)的那些组 count(*)与count(1) 其实没有什么差别,用哪...原创 2020-09-29 01:04:22 · 6272 阅读 · 0 评论 -
MySQL的架构及查询sql的执行流程(二)
目录`sql` 语句的解析顺序sql 语句的解析顺序接下来再走一步,让我们看看一条 sql 语句的前世今生。首先看一下示例语句SELECT DISTINCT < select_list >FROM < left_table > < join_type >JOIN < right_table > ON < join_condition >WHERE < where_condition >GROUP B原创 2021-09-01 17:51:25 · 171 阅读 · 0 评论 -
MySQL的架构及查询sql的执行流程(一)
目录`mysql` 的整体架构`Server` 层存储引擎层mysql 的整体架构Server 层大多数 mysql 核心服务都位于这一层,主要包括连接器、查询缓存、分析器、优化器、执行器等,所有跨存储引擎的功能都在这一层实现,比如存储过程、触发器、视图,函数(如日期、时间、数学和加密函数等)等,还有一个通用的日志模块 binglog 日志模块。不同的存储引擎共用一个 Server 层存储引擎层主要负责数据的存储和提取。其架构模式是插件式的,包括 InnoDB、MyISAM、Memory 等多个原创 2021-07-03 22:00:57 · 180 阅读 · 1 评论 -
MySQL的锁
mysql 的存储引擎以及区别mysql 的存储引擎有两种,MyISAM 和 InnoDBMyISAM 默认使用的是表级锁,InnoDB 默认使用的是行级锁MyISAM 不支持事务,InnoDB 支持事务目前,mysql 常用的存储引擎是 InnoDB,相对于 MyISAM 而言。InnoDB 更适合高并发场景,同时也支持事务处理mysql 锁的分类按锁的粒度划分,可分为表级锁、行级锁按锁级别划分,可分为共享锁、排他锁按使用方式划分,可分为乐观锁、悲观锁表级锁与行级锁表级锁表锁原创 2021-03-25 15:16:17 · 915 阅读 · 0 评论 -
如何保证缓存与数据库的双写一致性
如何保证缓存与数据库的双写一致性只要使用到缓存,无论是本地内存做缓存还是使用 redis 做缓存,那么就会存在缓存与数据库同步的问题,接下来就讨论一下关于保证缓存和数据库双写时的数据一致性我们这里列出来所有策略,并且讨论他们优劣性先更新数据库,后更新缓存(不建议采用)先更新缓存,后更新数据库(不建议采用)先删除缓存,后更新数据库(不太理想,可以采用)先更新数据库,后删除缓存(建议采用)先更新数据库,后更新缓存(不建议采用)这套解决方案,大家普遍反对的,一般是没有人使用的原因一(会产生缓原创 2021-03-29 23:13:30 · 330 阅读 · 0 评论 -
MySQL的索引(二)
目录`mysql` 的索引实现为表中字段加索引时 `InnoDB` 是如何建立索引树的为什么 `InnoDB` 只在主键索引树的叶子节点存储了具体数据,但其他索引树却不存具体数据,而要多此一举先找到主键,再在主键索引树找到对应的数据索引的使用原则`sql` 的一些优化方法执行计划 `explain``explain` 各个字段的含义`explain` 中的 `type` 字段`explain` 中的 `Extra` 字段数据库大数据量查询的情况下,速度慢形成的原因mysql 的索引实现InnoDB 是聚原创 2021-09-06 00:23:07 · 194 阅读 · 0 评论 -
MySQL的索引(一)
1.索引是什么索引是为了加速对表中数据的检索的一种数据结构。其工作机制如下图:上图中,如果现在有一条 sql 语句select * from user where id = 40如果没有索引的条件下,我们要找到这条记录,我们就需要在数据中进行全表扫描,匹配 id = 40 的数据如果有了索引,我们就可以通过索引进行快速查找,如上图中,可以先在索引中通过 id = 40 进行二分查找,再根据定位到的地址取出对应的行数据2.MySQL 为什么要使用 B+TREE 作为索引的数据结构2.1 二叉原创 2020-12-28 19:36:32 · 1288 阅读 · 0 评论 -
MySQL把A表的数据插入到B表
目录背景`A` 表的数据插入到 `B` 表中如果两张表的字段一致如果插入指定字段背景web 开发中,我们经常需要将一个表的数据插入到另外一个表,有时还需要指定导入字段,设置只需要导入目标表中不存在的记录,虽然这些都可以在程序中拆分成简单 sql 来实现,但是用一个 sql 的话,会节省大量代码A 表的数据插入到 B 表中如果两张表的字段一致-- 插入 A 表的全部数据INSERT INTO 目标表 (SELECT * FROM 来源表)INSERT INTO insertTest (SELE原创 2021-08-17 14:14:04 · 6427 阅读 · 0 评论