MYSQL
文章平均质量分 96
mysql
童话ing
放弃不难,但坚持一定很酷。
展开
-
【源码阅读】Golang中的go-sql-driver库源码探究
在上篇文章中我们知道,database/sql只是提供了驱动相关的接口,并没有相关的具体实现,具体内容是由第三方实现的,如,本章中我们主要是探究这个驱动实现库的具体实现。以及它是如何与database/sql一起作用的。原创 2024-05-01 18:30:10 · 921 阅读 · 2 评论 -
【源码阅读】 Golang中的database/sql库源码探究
在golang中,我们比较熟悉的mysql相关的库就是database/sql,这是golang的内置库,该标准库没有具体实现,只列出第三方库需要实现的具体内容。也就是说,这个库只是定义了接口,并没有具体的实现。Go语言为开发数据库驱动定义了一些标准接口,使用标准接口开发的代码,在迁移数据库时,不需要做任何修改(当然双方数据库都遵守标准接口)。下面我将基于golang1.19的源码探究这个库的实现。原创 2024-04-28 21:48:01 · 1383 阅读 · 0 评论 -
【MySQL】drop、truncate和delete的区别及效率
前言对于drop、truncate和delete,虽然简单,但是真要使用或者面试时候问到还是需要有一定的总结,自己也比较懒,前面很多人总结过了,但是并不完善,因此参看多篇文章之后进行一个总结。在此之前先简单了解下什么是DDL和DML。DDL(数据定义语言,Data Definition Language):DDL代表数据定义语言,是一种有助于创建数据库模式的SQL命令。DDL中常用的命令有:create,drop,alter,truncate和rename等等。DML(数据操作语言,Data Mani原创 2022-02-07 17:54:14 · 10000 阅读 · 0 评论 -
【SQL】SQL查询书写和执行顺序相关知识
查询语句中,经常使用的关键字不外乎为以下几个,他们的书写顺序亦如下所示:select--from--where--group by--having--order by其中select和from是必须的,其他关键词是可选的,他们的执行顺序与sql语句的书写顺序并不是一致的,他们的执行顺序为:from--where--group by--having--select--order by,from:需要从哪个数据表检索数据 where:过滤表中数据的条件 group by:如何将上面过滤出的数据分组原创 2021-11-04 10:59:55 · 1840 阅读 · 0 评论 -
【MySQL】ACID特性的实现原理
文章目录一、基础概念1.1 逻辑架构和存储引擎1.2 提交和回滚1.3 ACID特性二、原子性2.1 定义2.2 实现原理:undo log三、持久性3.1 定义3.2 实现原理:redo log3.3 redo log与binlog四、隔离性4.1 定义4.2 锁机制4.3 脏读、不可重复读和幻读4.4 事务隔离级别5.5 MVCC五、一致性5.1 基本概念5.2 实现 事务是MySQL等关系型数据库区别于NoSQL的重要方面,是保证数据一致性的重要手段。本文将首先介绍MySQL事务相关的转载 2021-05-11 16:40:31 · 622 阅读 · 0 评论 -
【MySQL】MySQL为什么用B+树做索引而不用B-树或红黑树?
思考:1.什么是数据库索引?数据库查询是数据库的主要功能之一,最基本的查询算法是顺序查找(linear search)时间复杂度为O(n),显然在数据量很大时效率很低。优化的查找算法如二分查找(binary search)、二叉树查找(binary tree search)等,虽然查找效率提高了。但是各自对检索的数据都有要求:二分查找要求被检索数据有序,而二叉树查找只能应用于二叉查找树上,但是数据本身的组织结构不可能完全满足各种数据结构(例如,理论上不可能同时将两列都按顺序进行组织)。所以,在数据之外,转载 2021-04-17 21:21:06 · 6182 阅读 · 1 评论 -
MVCC多版本并发控制
纯转载文章,方便翻阅。原文地址:MVCC多版本并发控制一、什么是MVCC?MVCC,全称Multi-Version Concurrency Control,即多版本并发控制。MVCC是一种并发控制的方法,一般在数据库管理系统中,实现对数据库的并发访问,在编程语言中实现事务内存。MVCC在MySQL InnoDB中的实现主要是为了提高数据库并发性能,用更好的方式去处理读-写冲突,做到即使有读写冲突时,也能做到不加锁,非阻塞并发读。什么是当前读和快照读?在学习MVCC多版本并发控制之前,我们必.转载 2021-03-31 19:45:56 · 248 阅读 · 0 评论 -
【MySQL】B树和B+树
1 B树在介绍B+树之前, 先简单的介绍一下B树,这两种数据结构既有相似之处,也有他们的区别,最后,我们也会对比一下这两种数据结构的区别。1.1 B树概念B树也称B-树,它是一颗多路平衡查找树。二叉树我想大家都不陌生,其实,B树和后面讲到的B+树也是从最简单的二叉树变换而来的,并没有什么神秘的地方,下面我们来看看B树的定义。每个节点最多有m-1个关键字(可以存有的键值对)。根节点最少可以只有1个关键字。非根节点至少有m/2个关键字。每个节点中的关键字都按照从小到大的顺序排列,每个关键字的左子转载 2021-03-05 10:30:11 · 2142 阅读 · 2 评论 -
【MySQL】聚簇索引与非聚簇索引(二级索引)
二者区别聚簇索引:将数据存储与索引放到了一块,索引结构的叶子节点保存了行数据,找到索引也就找到了数据。非聚簇索引:将数据与索引分开存储,索引结构的叶子节点指向了数据对应的行,MyISAM通过key_buffer把索引先缓存到内存中,当需要访问数据时(通过索引访问数据),在内存中直接搜索索引,然后通过索引找到磁盘相应数据,这也就是为什么索引不在key_buffer命中时,速度慢的原因。在InnoDB中,在聚簇索引之上创建的索引称之为辅助索引,辅助索引访问数据总是需要二次查找,非聚簇索引都是辅转载 2021-03-05 08:56:49 · 1275 阅读 · 1 评论 -
MySQL 表锁、行锁、间隙锁、页锁介绍分析
文章目录前言行锁MySQL 事务属性并发事务常见问题事务的隔离级别间隙锁排他锁共享锁分析行锁定行锁优化表锁共享读锁独占写锁分析表锁定什么场景下用表锁页锁总结前言行锁变表锁,是福还是坑?如果你不清楚MySQL加锁的原理,你会被它整的很惨!不知坑在何方?没事,我来给你们标记几个坑。遇到了可别乱踩。通过本章内容,带你学习MySQL的行锁,表锁,两种锁的优缺点,行锁变表锁的原因,以及开发中需要注意的事项。还在等啥?经验等你来拿!MySQL的存储引擎是从MyISAM到InnoDB,锁从表锁到行锁。后者的出现从某转载 2020-12-10 10:52:48 · 1147 阅读 · 0 评论 -
MySQL批量插入数据(load data 和存储过程方式)
文章内容来自于:尚硅谷MySQL技术高级篇MySQL批量插入数据最简单的就是循环遍历,调用多次INSERT语句不就可以插入多条记录了吗!但是这种方法会增加服务器的负荷,因为,执行每一次SQL,服务器都要同样对SQL进行分析、优化等操作。MySQL提供了另一种解决方案,就是使用一条INSERT语句来插入多条记录。这并不是标准的SQL语法,因此只能在MySQL中使用。@[toc]## 方式一、load data infile命令首先修改my.ini(linux是/etc/my.cnf)下secure.原创 2020-12-10 09:31:04 · 1684 阅读 · 1 评论 -
MySQL索引优化总结以及索引失效常见问题
文章内容来自于:尚硅谷MySQL技术高级篇文章目录1、 前言2. 索引失效优化案例2.1 全值匹配我最爱2.2 最佳左前缀法则2.3 不在索引列上做任何操作2.4 存储引擎不能使用索引中的范围条件右边的列2.5 尽量使用覆盖索引2.6 mysql在使用不等于(!=或者<>)的时候无法使用索引导致全表扫描2.7 is null可以触发索引,is not null无法触发索引2.8 like以通配符开头(’%abc…’)索引失效会变成全表扫描2.9 字符串不加单引号索引失效2.10 少用or,.转载 2020-12-09 22:17:51 · 487 阅读 · 0 评论 -
MyISAM与InnoDB 的区别
纯转载文章,来源见文末。区别:1. InnoDB支持事务,MyISAM不支持,对于InnoDB每一条SQL语言都默认封装成事务,自动提交,这样会影响速度,所以最好把多条SQL语言放在begin和commit之间,组成一个事务;2. InnoDB支持外键,而MyISAM不支持。对一个包含外键的InnoDB表转为MYISAM会失败;3. InnoDB是聚集索引,使用B+Tree作为索引结构,数据文件是和(主键)索引绑在一起的(表数据文件本身就是按B+Tree组织的一个索引结构),必须要有主键,通过主键索转载 2020-11-10 22:04:32 · 193 阅读 · 0 评论 -
Mysql乐观锁与悲观锁的区别
05 mysql-乐观锁与悲观锁的区别文章目录1、悲观锁2、乐观锁3、两种锁的使用场景4、乐观锁常见的两种实现方式4.1、 版本号机制4.2、 CAS算法5、乐观锁的缺点5.1、 ABA 问题5.2、 循环时间长开销大5.3、 只能保证一个共享变量的原子操作1、悲观锁 总是假设最坏的情况,每次去拿数据的时候都认为别人会修改,所以每次在拿数据的时候都会上锁,这样别人想拿这个数据就会阻塞直到它拿到锁(共享资源每次只给一个线程使用,其它线程阻塞,用完后再把资源转让给其它线程)。传统的关系型数...转载 2020-10-26 16:12:52 · 2298 阅读 · 0 评论 -
七种MYSQL插入数据后返回自增主键ID的方法
我们都知道,mysql中的insert插入之后会有返回值,返回的是影响的行数,也就是说,成功插入一条数据之后返回的是1,失败则返回0。那么,很多时候我们都想要得到最后插入的id值,下面七种方法均可,结合场景使用。MYSQL插入数据后返回自增ID的方法mysql和oracle插入的时候有一个很大的区别是,oracle支持序列做id,mysql本身有一个列可以做自增长字段,mysql在插入一条数据后,如何能获得到这个自增id的值呢?1、使用last_insert_idSELECT LAST_IN..原创 2020-10-26 10:09:34 · 16897 阅读 · 4 评论 -
Mysql中外键作用以及Navicat建立外键失败总结
本文摘自参考三篇文章,从这篇文章中将了解到外键作用以及navicat建立外键常见错误解决,帮助读者更加深刻了解外键。 文章目录外键的作用不设置外键行不行?那到底使不使用外键?外键的作用外键用于与另一张表的关联。是能确定另一张表记录的字段,用于保持数据的一致性。测试用例:我们先建有外键关联的两张表然后在course表中插入一条数据:INSERT INTO tb_course (StuId, CourseName, Score) VALUES (1, 'java基础', 80...原创 2020-10-22 12:40:10 · 2790 阅读 · 1 评论 -
Mysql sql语句字段截取前几位,后几位等+Mybatis中的大于小于等的判断写法+Mysql如何正则匹配查询
文章目录一、Mysql sql语句字段截取前几位,后几位等二、Mybatis中的大于小于等的判断写法三、Mysql如何正则匹配查询一、Mysql sql语句字段截取前几位,后几位等MySQL 字符串截取函数:left(), right(), substring(), substring_index()。还有 mid(), substr()。其中,mid(), substr() 等价于 substring() 函数,substring() 的功能非常强大和灵活。1. 字符串截取:left(str, le原创 2020-09-21 20:58:09 · 6415 阅读 · 0 评论 -
mysql-connector-java与Mysql、Java的对应版本
纯转载文章,方便查看,转载地址:mysql-connector-java与Mysql、Java的对应版本mysql-connector-java与Mysql对应版本:Connector/J versionDriver TypeJDBC versionMySQL Server versionStatus5.143.0, 4.0, 4.1, 4.25.6*, 5.7*, 8.0*General availability8.044.25.6, 5.7, 8.0G转载 2020-09-16 23:09:15 · 1380 阅读 · 0 评论 -
MYSQL性能优化(索引优化)
原文链接:https://pianshen.com/article/4043198259/SQL的执行过程:客户端发送一条查询给服务器;服务器通过权限检查之后,先会检查查询缓存,如果命中了缓存,则立即返回存储在缓存中的结果。否则进入下一阶段;服务器端进行SQL解析、预处理,再由优化器根据该SQL所涉及到的数据表的统计信息进行计算,生成对应的执行计划;MySQL根据优化器生成的执行计划,调用存储引擎的API来执行查询;将结果返回给客户端。schema(表结构)对性能的影响:冗余数据的转载 2020-09-04 22:00:11 · 136 阅读 · 0 评论 -
leetcode 177. 第N高的薪水
主要就是为了熟悉一下mysql一写东西,直接上代码。CREATE FUNCTION getNthHighestSalary(N INT) RETURNS INTBEGIN set n=N-1; RETURN ( # Write your MySQL query statement below. select ifnull( (select distinct Salary from Employee order by Salary desc limit.原创 2020-09-01 10:59:32 · 175 阅读 · 0 评论 -
mysql 5.7以上出现group by 语句不兼容问题
mysql 新版本出现group by 语句不兼容问题1、 具体出错提示:[Err] 1055 - Expression #1 of ORDER BY clause is not in GROUP BY clause and contains nonaggregated column ‘information_schema.PROFILING.SEQ’ which is not functionally dependent on columns in GROUP BY clause; this is原创 2020-08-31 12:25:37 · 2717 阅读 · 0 评论 -
Mysql本地安装+一台电脑安装两个版本mysql+安装包set安装
文章目录一、MYSQL8(本地安装):1.1 概要1.2 新建一个my.ini 文件,文件中内容如下,注意basedir 和 datadir 的配置;1.3、安装mysql1.4、安装启动mysql服务及常见出错解决二、一台电脑安装两个版本MYSQL2.1 安装mysql2.2 安装mysql服务2.3修改注册表三、安装包setup安装:一、MYSQL8(本地安装):1.1 概要首先要知道,从mysql8之后,下载的mysql安装包就直接解压可用了,不再是之前的exe执行文件安装方式。我们也可以直接拷原创 2020-07-23 20:28:36 · 3185 阅读 · 1 评论 -
MYSQL安装的两种方式
一、拷贝别人的Mysql整个文件夹方式(本地安装):首先要知道,我们直接拷贝别人的文件夹过来,包含了别人的数据库记录,这个记录存在于Mysql的data文件夹中,并且我们是没有mysql服务的,因此总共就需要进行几步操作,删除原来data文件夹中的记录、安装mysql服务以及重置mysql密码。直接在Mysql\bin目录上方路径中选中全部输入cmd进入命令行,mysqld --initi...原创 2019-10-25 20:13:03 · 517 阅读 · 0 评论 -
SpringBoot事务特性介绍以及注解版事务管理配置
纯转载文章,记录一下自己学习学习。原文地址:springboot+mybatis事务管理spring,mybatis事务管理配置与@Transactional注解使用概述事务管理对于企业应用来说是至关重要的,即使出现异常情况,它也可以保证数据的一致性。Spring Framework对事务管理提供了一致的抽象,其特点如下:为不同的事务API提供一致的编程模型,比如JTA(Java Transaction API), JDBC, Hibernate, JPA(Java Persistence AP转载 2020-06-27 09:52:28 · 466 阅读 · 0 评论 -
理解事务四大特性(Transaction)——原子性、一致性、隔离性和持久性(ACID)
事务是指对系统进行的一组操作,为了保证系统的完整性,事务需要具有ACID特性,具体如下:原子性(Atomic)一个事务包含多个操作,这些操作要么全部执行,要么全都不执行。实现事务的原子性,要支持回滚操作,在某个操作失败后,回滚到事务执行之前的状态。回滚实际上是一个比较高层抽象的概念,大多数DB在实现事务时,是在事务操作的数据快照上进行的(比如,MVCC),并不修改实际的数据,如果有错并不会提交,所以很自然的支持回滚。而在其他支持简单事务的系统中,不会在快照上更新,而直接操作实际数据。可以先预演一边原创 2020-06-24 09:50:26 · 9443 阅读 · 1 评论 -
Mysql查询指定时间数据+Mybatis中#{}和${}区别及使用场景
文章目录Mysql查询时间段数据MySQL 日期格式Mysql查询时间段数据今天select * from 表名 where to_days(时间字段名) = to_days(now());昨天SELECT * FROM 表名 WHERE TO_DAYS( NOW( ) ) - TO_DAYS( 时间字段名) <= 1近7天SELECT * FROM 表名 where DATE_SUB(CURDATE(), INTERVAL 7 DAY) <= date(时间字段名)近30转载 2020-06-21 21:18:52 · 1411 阅读 · 0 评论 -
Mysql自增字段设置+中间表实现联合查询+左外、右外与内连接区别实例讲解
创建好表字段之后修改字段id为自增alter table role modify id int(12) auto_increment;创建好表之后没有字段idalter table role add id int(12) primary key not null auto_increment;注意如果需要设置主键,但是表中有主键,需要用drop命令将原来的主键删掉才能设置。alter ...原创 2020-04-24 23:13:43 · 2316 阅读 · 0 评论