数据库知识
文章平均质量分 79
mysql 等数据库相关知识
LiZhen798
软件研发工程师
语言:Java,Go
展开
-
Druid连接池经常性断链问题
应用在使用Druid连接池访问数据库的时候,需要根据业务TPS和并发调整合适的配置,以利用Druid连接池的实现对连接的创建、保活和释放管理。当遇到类似断链的问题的时候,要从端到端的每个点进行排查分析,以定位到最终的原因,比如这次的负载均衡的配置是很难想到的。原创 2024-03-12 17:03:23 · 1756 阅读 · 0 评论 -
MySQL之BETWEEN AND包含范围查询总结
结论: 若datetime类型时,查询参数带时分秒,BETWEEN AND相当于 x >= y && x<=z。结论: 若datetime类型时,查询参数不带时分秒,BETWEEN AND相当于 x >= y && x<z。结论: 若date类型时,查询参数不带时分秒,BETWEEN AND相当于 x >= y && x<=z。参数yyyy-MM-dd格式时,只包含头,相当于x>=y && x<z。型,参数不带时分秒(yyyy-MM-dd)包含头尾,相当于:x>=y && x<=z。原创 2023-11-21 16:52:18 · 3082 阅读 · 0 评论 -
Every derived table must have its own alias
在做多表查询,或者查询的时候产生新的表的时候会出现这个错误:Every derived table must have its own alias原创 2022-10-21 19:20:28 · 3854 阅读 · 0 评论 -
No query specified(Mysql数据库报错)
虽然可以正确执行,但是也出现了报错。经过一番查找和尝试发现当命令结尾不加分号的时候不报错,因此出现此错误的原因是因为执行命令: show create procedure protest.pro_test1\G;的时候,多加了一个“;可以以此类推,不管执行什么命令,\G后不用加分号,否则就会出现此类错误。我在使用语句 show create procedure protest.pro_test1\G;查询存储过程的时候出现了错误: ERROR: No query specified。原创 2022-08-24 17:34:11 · 7315 阅读 · 0 评论 -
MySQL查询中LIMIT的大offset会导致性能低下
在业务系统中难免少不了分页的需求。想到分页的时候,大家肯定会想到使用SQL中的LIMIT来实现。但是,如果不正确的使用LIMIT会导致性能问题(SQL执行得很慢、有可能会拖垮服务器),也会被领导批的;所以,我们来看看如何正确地使用LIMIT。LIMIT OFFSET, ROW_COUNT 实现分页存在性能问题的方式SELECT * FROM myTable ORDER BY `id` LIMIT 1000000, 30写出这样SQL语句的人肯定心里是这样想的:MySQL数据库会直接定位..原创 2022-01-14 15:56:14 · 567 阅读 · 1 评论 -
MySql中的锁
共享锁:简称S锁。在事务要读取一条记录时,幼先获取该记录的S锁。独占锁,又称排它锁:简称X锁。在事务要改动一条记录时,需要先获取该记录的X锁。 兼容性 X锁 S锁 X锁 不兼容 不兼容 S锁 不兼容 兼容 备注:兼容指的是多个事务在对同一条记录获取锁时,各自锁类型对应的操作之间不会出现阻塞排队情况。对锁定的记录加S锁:SELECT……LOCK IN SHARE MODE;对锁定的记录加X锁:SELE原创 2021-10-27 15:17:25 · 99 阅读 · 0 评论 -
事务传播机制REQUIRES_NEW,在嵌套事务中不起作用的解决方法
事务传播机制REQUIRES_NEW的官方文档中是这样解释的:Create a new transaction, and suspend the current transaction if one exists.翻译为创建一个新事务,如果当前存在事务,则挂起当前存在的事务。总结下REQUIRES_NEW有两层含义:1.REQUIRES_NEW会开启新事务,外层事务不会影响内层事务的提交和回滚操作2.REQUIRES_NEW如果内层事务出现异常,则外层事务也会同样进行回滚操作...原创 2021-10-27 14:42:14 · 1439 阅读 · 0 评论 -
数据库死锁
一、背景知识Mysql innodb如何进行数据读取,什么样的数据读取需要加锁,数据隔离级别是什么样的,什么情况下该使用什么类型的锁,锁定的方式又是什么,在本小节梳理了相关背景知识,解答了以上疑问,以更清晰地了解锁机制及死锁产生的原因。1.1.MVCC:快照读(Snapshot Read)与当前读(Current Read)MySQL InnoDB存储引擎,实现的是基于多版本的并发控制协议——MVCC (Multi-Version Concurrency Control) (注:与MVCC相对的原创 2021-07-04 00:03:23 · 5720 阅读 · 0 评论 -
MySQL-MVCC机制
一、前言前面介绍了MySQL的锁机制,提到过写锁和读锁是冲突的,那么MySQL是如何处理读写冲突,提高数据库高并发场景下的吞吐性能?本章主要是介绍MVCC (Multiversion Concurrency Control) ,即多版本并发控制。二、什么是MVCCSELECT 操作可以不加锁而是通过 MVCC 机制读取指定的版本历史记录,并通过一些手段保证保证读取的记录值符合事务所处的隔离级别,从而解决并发场景下的读写冲突。下面举一个多版本读的例子,例如两个事务 A 和 B 按照如下顺序进行原创 2021-06-16 19:46:54 · 147 阅读 · 0 评论 -
spring事务嵌套及回滚
Spring事务嵌套的相关问题:外层事务 Service A 的 Method A() 调用 内层Service B 的 Method B()原创 2021-05-28 20:22:03 · 2373 阅读 · 3 评论 -
分布式事务的几种实现方式
两阶段提交(2PC)两阶段提交协议是协调所有分布式原子事务参与者,并决定提交或取消(回滚)的分布式算法。(1)协议参与者在两阶段提交协议中,系统一般包含两类机器(或节点):一类为协调者(coordinator),通常一个系统中只有一个;另一类为事务参与者(participants,cohorts或workers),一般包含多个,在数据存储系统中可以理解为数据副本的个数。协议中假设每个节点都会记录写前日志(write-ahead log)并持久性存储,即使节点发生故障日志也不会丢失。协议中同时假设原创 2021-03-31 20:15:00 · 1253 阅读 · 0 评论 -
InnoDB锁问题(2)
目录5. Next-Key锁6 恢复和复制的需要,对InnoDB锁机制的影响7. InnoDB在不同隔离级别下的一致性读及锁的差异8. 什么时候使用表锁9. 关于死锁书接上文:5. Next-Key锁当我们用范围条件而不是相等条件检索数据,并请求共享或排他锁时,InnoDB会给符合条件的已有数据记录的索引项加锁;对于键值在条件范围内但并不存在的记录,叫做“间隙(GAP)”,InnoDB也会对这个“间隙”加锁,这种锁机制就是所谓的间隙锁(Next-Key锁)。举例来说,假如原创 2021-03-24 17:20:32 · 174 阅读 · 0 评论 -
InnoDB锁问题(1)
目录0. 序1. 基础知识1.1 事务(Transaction)及其ACID属性1.2 并发事务处理带来的问题1.3 事务隔离级别2. 获取InnoDB行锁争用情况3. InnoDB的行锁模式及加锁方法4. InnoDB行锁实现方式4.1在不通过索引条件查询时,InnoDB会锁定表中的所有记录4.2查询同一个索引值的不同记录时会出现锁冲突4.3可以通过不同索引锁不同行,但通过多个索引锁定同一行会产生锁冲突4.4需要检查实际执行SQL时是否用到了索引0. 序原创 2021-03-24 17:14:18 · 733 阅读 · 0 评论 -
分布式系统全局唯一ID的几种实现方式
现如今可谓是微服务、分布式、IoT(物联网)横行的时代,作为一名开发者始终还是要保持一定的危机意识,特别是在日常的项目开发中,若是有机会接触到一些关于微服务、分布式下的应用场景,应当硬着头皮、排除万难,主动应承下来上去大干一场;这期间不管结果如何,积累下来的经验将会让自己受益匪浅;而本文要介绍的“分布式全局唯一ID”便是一种典型的分布式应用场景!!!话不多说,咱们直接进入正题~~~说起这个全局唯一ID,你可能会第一时间想到“数据库的自增主键”、“UUID”、“雪花算法”等等,更有甚者,还能说出一...原创 2021-03-23 20:16:41 · 656 阅读 · 0 评论 -
MySQL日志系统:redo log、binlog、undo log 区别与作用
日志系统主要有redo log(重做日志)和binlog(归档日志)。redo log是InnoDB存储引擎层的日志,binlog是MySQL Server层记录的日志, 两者都是记录了某些操作的日志(不是所有)自然有些重复(但两者记录的格式不同)。图来自极客时间的mysql实践,该图是描述的是MySQL的逻辑架构。redo log日志模块redo log是InnoDB存储引擎层的日志,又称重做日志文件,用于记录事务操作的变化,记录的是数据修改之后的值,不管事务是否提交都会记录下来。在实例和转载 2021-03-23 19:54:16 · 125 阅读 · 0 评论 -
MySQL插入更新 ON DUPLICATE KEY UPDATE
目录ON DUPLICATE KEY UPDATE 简介ON DUPLICATE KEY UPDATE 使用ON DUPLICATE KEY UPDATE 注意事项:ON DUPLICAET KEY UPDATE 空洞问题ON DUPLICATE KEY UPDATE 简介项目中偶尔会有这种需求:我们想向数据库插入一条记录: 若数据表中存在以相同主键的记录,我们就更新该条记录。 否则就插入一条新的记录。可以通过ON DUPLICATE K...原创 2021-03-23 15:52:05 · 220 阅读 · 0 评论 -
Mysql的锁相关的知识
一、数据库的锁和事务的隔离级别行锁(Record lock)单条索引记录上加锁,record lock锁住的永远是索引,而非记录本身,即使该表上没有任何索引,那么innodb会在后台创建一个隐藏的聚集主键索引,那么锁住的就是这个隐藏的聚集主键索引。所以说当一条sql没有走任何索引时,那么将会在每一条聚集索引后面加X锁,这个类似于表锁,但原理上和表锁应该是完全不同的。间隙锁(Gap lock)在索引记录之间的间隙中加锁,或者是在某一条索引记录之前或者之后加锁,并不包括该索引记录本身。ga原创 2021-03-18 17:24:15 · 106 阅读 · 0 评论 -
Spring @Transactional踩坑记
目录@Transactional踩坑记总述踩坑记1. 多数据源2. 内部调用填坑总结参考链接@Transactional踩坑记总述 Spring在1.2引入@Transactional注解, 该注解的引入使得我们可以简单地通过在方法或者类上添加@Transactional注解,实现事务控制。 然而看起来越是简单的东西,背后的实现可能存在很多默认规则和限制。而对于使用者如果只知道使用该注解,而不去考虑背后的限制,就可能事与愿违,到时候线上出了问题可能根本都找不出啥原因转载 2021-03-17 20:25:09 · 260 阅读 · 0 评论 -
深入理解 Spring 事务原理
一、事务的基本原理Spring事务的本质其实就是数据库对事务的支持,没有数据库的事务支持,spring是无法提供事务功能的。对于纯JDBC操作数据库,想要用到事务,可以按照以下步骤进行: 获取连接 Connection con = DriverManager.getConnection() 开启事务con.setAutoCommit(true/false); 执行CRUD 提交事务/回滚事务 con.commit() / con.rollback(); 关原创 2021-03-16 17:23:37 · 488 阅读 · 0 评论 -
Redis缓存Key设置
目录背景:持仓缓存key设置方法及出现问题:原因分析和解决方案:Redis缓存注意点:背景:春节活动期间,为了提高业务接口的平均响应时间,给业务相关接口加缓存。持仓缓存key设置方法及出现问题:缓存key设置方法:key用接口对应的“包名+类名+方法名+userId”设置,例如:/h5/regular/finance/myfixedfinances(用户定期总资产)缓存key为:com.XXXUserCenterController.getMyFixedProjectInf原创 2021-03-11 19:41:36 · 1939 阅读 · 0 评论 -
Redis和Zookeeper实现分布式锁
Redis实现分布式锁Redis分布式锁实现的三个核心要素:1.加锁最简单的方法是使用setnx命令。key是锁的唯一标识,按业务来决定命名,value为当前线程的线程ID。比如想要给一种商品的秒杀活动加锁,可以给key命名为 “lock_sale_ID” 。而value设置成什么呢?我们可以姑且设置成1。加锁的伪代码如下: setnx(key,1)当一个线程执行setnx返回1,说明key原本不存在,该线程成功得到了锁,当其他线程执行setnx返回0,说明key已经存在,该线程抢...原创 2021-03-09 17:36:57 · 462 阅读 · 0 评论 -
InnoDB存储引擎索引的数据结构、算法原理和策略优化
什么是索引 大结局 一个具体的索引例子 索引的数据结构和算法 B-Tree数据结构 算法 B+ Tree数据结构 算法 MySQL索引的数据结构是B+树 局部性原理与磁盘预读 HASH索引 二叉排序树 红黑树 B-Tree和B+Tree的性能优势 聚簇索引和非聚簇索引 聚簇索引 非聚簇索引 联合(组合)索引 Key和Index 索引使用策略及优化 情况一:全列匹配 情况二:最左前缀原创 2021-03-04 17:36:05 · 632 阅读 · 2 评论 -
MySQL字段类型转换引发的索引失效
概述最近发现一个有趣的SQL优化场景,分享一下测试数据表结构CREATE TABLE `dateindex_test` ( `id` int(11) NOT NULL AUTO_INCREMENT, `t1` varchar(100) DEFAULT NULL, `t2` text, `t2_sub` text, `t3` varchar(50) DEFAULT NULL, `url` varchar(100) DEFAULT NULL, `t4` varcha转载 2020-05-14 19:38:49 · 1377 阅读 · 0 评论 -
使用@Transactional 注意一下几点
这里面有几点需要大家留意:A. 一个功能是否要事务,必须纳入设计、编码考虑。不能仅仅完成了基本功能就ok。B. 如果加了事务,必须做好开发环境测试(测试环境也尽量触发异常、测试回滚),确保事务生效。C. 以下列了事务使用过程的注意事项,请大家留意。1. 不要在接口上声明@Transactional ,而要在具体类的方法上使用 @Transactional 注解,否则注解可能无效。2.不要...转载 2019-11-25 19:42:40 · 294 阅读 · 0 评论 -
为什么分布式一定要有redis
1、为什么使用redis分析:博主觉得在项目中使用redis,主要是从两个角度去考虑:性能和并发。当然,redis还具备可以做分布式锁等其他功能,但是如果只是为了分布式锁这些其他功能,完全还有其他中间件(如zookpeer等)代替,并不是非要使用redis。因此,这个问题主要从性能和并发两个角度去答。回答:如下所示,分为两点(一)性能如下图所示,我们在碰到需要执行耗时特别...转载 2019-10-16 13:53:23 · 120 阅读 · 0 评论 -
MySQL 建表时的四种key
mysql的key和index多少有点令人迷惑,这实际上考察对数据库体系结构的了解的。1 key 是数据库的物理结构,它包含两层意义,一是约束(偏重于约束和规范数据库的结构完整性),二是索引(辅助查询用的)。包括primary key, unique key, foreign key 等。 primary key 有两个作用,一是约束作用(constraint),用来规范一个存储主键和唯一性...转载 2019-10-15 16:05:36 · 766 阅读 · 0 评论 -
mysql数据库与数据库实例的区别
对于mysql数据库指的是文件的集合,是按照某种数据模型组织起来的并以二进制存储的数据集合。数据库实例是应用程序,是位于用户与操作系统之间的一层数据管理软件,用户对数据库进行操作,包括定义表结构,数据查询,数据维护等控制,都是在数据库实例下进行的,可以这样理解,应用程序通过数据库实例才能和数据库打交道。...转载 2018-02-27 14:53:28 · 4951 阅读 · 0 评论 -
数据库与数据源的区别
数据库与数据源的区别jdbc基础1.什么是数据源?答:数据源定义的是连接到实际数据库的一条路径而已,数据源中并无真正的数据,它仅仅记录的是你连接到哪个数据库,以及如何连接的,如odbc数据源。也就是说数据源仅仅是数据库的连接名称,一个数据库可以有多个数据源连接。 ...转载 2018-02-27 14:44:33 · 19708 阅读 · 7 评论 -
快速删除数据库的表
SELECT CONCAT('drop table ',table_name,';') FROM information_schema.`TABLES` WHERE table_schema='数据库名';原创 2018-02-09 17:49:34 · 807 阅读 · 0 评论 -
MYSQL创建数据库并分权限给用户
/* 创建数据库db0 */CREATE DATABASE db0 DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;/*授权给用户名为user,密码为password的任何主机登录操作*/grant all privileges on db0.* to user@'%' identified by 'password';/*授权原创 2018-01-26 16:00:23 · 332 阅读 · 0 评论 -
MYSQL删除别名
mysql中删除时要使用别名时应该这么写:delete a from tablename a where a.id='10';原创 2018-01-12 10:05:09 · 357 阅读 · 0 评论 -
MySQL中的实例、数据库的关系
Mysql的简介1、MySQL是单进程多线程(而Oracle等是多进程),也就是说MySQL实例在系统上表现就是一个服务进程,即进程(通过多种方法可以创建多实例,再安装一个端口号不同的mysql,或者通过workbench来新建一个端口号不同的服务器实例等),该架构类似于SQL Server和Windows版本的Oracle;2、MySQL实例是线程和内存组成,实例才是真正用于操作数据库文件的(M...转载 2018-02-27 15:00:12 · 6497 阅读 · 0 评论 -
Mycat源码篇 : 起步,Mycat源码阅读调试环境搭建
在研究mycat源码之前必须先把环境搭建好。这篇文章的目标就是搭建mycat源码调试环境。环境主要包括:gitjdkmaveneclipsemysql这里假设你知道上面的知识点。我们搭建的环境所处于的操作系统是Windows7+。下面将一步一步讲解如何搭建源码调试环境:1. 环境搭建1.1 获取mycat源码mycat源码托管在github上面,为了以后实时获取源码,我们需要先安装并配置好git客...转载 2018-03-02 11:00:35 · 365 阅读 · 0 评论 -
mysql错误:Cannot delete or update a parent row: a foreign key constraint fails
错误原因是:表之间存在相互关联,不能级联删除。解决方法:设置原创 2018-05-18 16:54:06 · 2602 阅读 · 0 评论 -
使用plsql查询数据显示为乱码解决方案
使用plsql查询数据显示为乱码: 查看数据库编码: 通过网上搜索,发现需要设置环境变量,添加以下环境变量: LANG=zh_CN.GBK NLS_LANG="SIMPLIFIED CHINESE_CHINA.ZHS16GBK" 再次登录plsql查询,显示正常了! ...转载 2017-07-07 12:35:30 · 335 阅读 · 0 评论 -
数据库的复合主键
主键是唯一的索引,那么为何一个表可以创建多个主键呢?其实“主键是唯一的索引”这话有点歧义的。举个例子,我们在表中创建了一个ID字段,自动增长,并设为主键,这个是没有问题的,因为“主键是唯一的索引”,ID自动增长保证了唯一性,所以可以。此时,我们再创建一个字段name,类型为varchar,也设置为主键,你会发现,在表的多行中你是可以填写相同的name值的,这岂不是有违“主键是唯一的索引”这原创 2017-07-14 14:52:25 · 529 阅读 · 0 评论 -
union all和union区别
1:主要区别在于union连接查询时,会去掉重复的数据。 union all 则不会,会显示所有连接查询的内容。2:union会对查询出来的数据进行排序(会按照select后的第一个字段进行排序,也能通过order by改变排序) union all不会进行排序。翻译 2017-08-23 23:01:44 · 415 阅读 · 0 评论 -
redis的安装(linux)
1、下载Redis (由于redis官网老是挂,大家可以在一下链接下载)链接: https://pan.baidu.com/s/14TZsBDG 密码: ptae2、解压、编译在编译完成后在src目录下启动redis服务3、启动客户端(可以使用redis内置客户端进行数据的操作)注意启动客户端的时候要保持redis的启动。...原创 2018-05-04 16:01:59 · 173 阅读 · 0 评论 -
MYSQL日期和时间函数
MYSQL日期和时间函数 大汇总这里是一个使用日期函数的例子。下面的查询选择了所有记录,其date_col的值是在最后30天以内: mysql SELECT something FROM table WHERE TO_DAYS(NOW()) - TO_DAYS(date_col) = 30; DAYOF MYsql日期和时间函数大汇总这里是一个使用日期函数的例子。下面的查询选择了所有转载 2017-06-25 14:25:10 · 275 阅读 · 0 评论