
SQL数据库
文章平均质量分 65
AlbenXie
这个作者很懒,什么都没留下…
展开
-
MybatisPlusConfig
自定义ISqlInjector sql注入器,添加通用方法。2、自定义配置见下面文章。1、详细说明见下面文章。原创 2022-11-22 16:14:16 · 3808 阅读 · 0 评论 -
Mybatis Plus 自定义SqlInjector sql注入器
3、MybatisPlus自定义SQL方法枚举类GeneralMybatisPlusSqlMethod。然后所有的mapper和servcie继承我们自定义扩展的基础mapper和service。2、方法对应的实现类UpdateAllColumnById。参考其他基本方法的实现类源码如:UpdateById等等。4、MybatisPlus配置类,加载自定义sql注入器。6、自定义基础service继承IService及实现类。5、自定义基础Mapper继承BaseMapper。转载 2022-11-22 16:11:03 · 5538 阅读 · 1 评论 -
Mybatis Plus分页查询超过最大页码的自定义处理
之前在很长一度按时间内,因为我做的项目不会这么多的使用分页,所以一直都是手动的判断页码是否溢出,如果溢出就将page的当前页码设置为查询得到的页面数量,再次进行查询。分页用的少还好,一旦像是现在这个项目这样大量的用到分页,就比较头疼了,所以,今天便打算自己封装一个Helper类。最近在做一个管理后台的项目,有很多分页查询,Mybatis Plus提供了非常优秀的分页插件,但是当查询页码大于最大页码的时候,就会出现结果空白。但是这样产生的效果是溢出后按照第一页查询,而笔者现想要在页码溢出时展示最后一页。转载 2022-11-22 15:58:56 · 1915 阅读 · 0 评论 -
Mybatis-plus 分页查询超过最大页数返回空数据问题
其中的paginationInnerInterceptor.setOverflow(true) 这个就是针对此问题的解决方案,意思就是-溢出总页数的时候默认是跳到第一页。类com/baomidou/mybatisplus/extension/plugins/inner/PaginationInnerInterceptor.java。即:total/pageSize = 40/10 = 4(页数) < 5(要访问的页)从上面源码中可以看出,如果溢出总页数的时候默认是跳到第一页。数据库查询返回的数据为空。转载 2022-11-22 15:49:29 · 3835 阅读 · 0 评论 -
MySQL 常用高可用方案
在使用 MGR 时,如果要实现完整的高可用方案,就需要用到 InnoDB Cluster。MHA(Master High Avaliable) 是一款 MySQL 开源高可用程序,MHA 在监测到主实例无响应后,可以自动将同步最靠前的 Slave 提升为 Master,然后将其他所有的 Slave 重新指向新的 Master。其大致原理是:在主实例的 Keepalived 中,增加监测本机 MySQL 是否存活的脚本,如果监测 MySQL 挂了,就会重启 Keepalived,从而使 VIP 飘到从实例。转载 2022-11-14 17:28:03 · 7413 阅读 · 0 评论 -
Mybatis的关联的嵌套 Select 查询中的N+1问题
你执行了一个单独的 SQL 语句来获取结果的一个列表(就是“+1”)。对列表返回的每条记录,你执行一个 select 查询语句来为每条记录加载详细信息(就是“N”)。这个问题会导致成百上千的 SQL 语句被执行。有时候,我们不希望产生这样的后果。转载 2022-10-18 17:00:21 · 694 阅读 · 1 评论 -
阿里DTS 学习笔记
DTS(Data Transmission Service, 数据传输服务),用于在关系型数据库、NoSQL数据库、数据仓库之间迁移数据。可以使用DTS将数据迁移至阿里云,也可以在阿里云和本地数据系统之间做数据迁移。转载 2022-10-09 09:46:01 · 5630 阅读 · 0 评论 -
为什么阿里巴巴不建议MySQL使用Text类型?
由于MySQL是单进程多线程模型,一个SQL语句无法利用多个cpu core去执行,这也就决定了MySQL比较适合OLTP(特点:大量用户访问、逻辑读,索引扫描,返回少量数据,SQL简单)业务系统,同时要针对MySQL去制定一些建模规范和开发规范,尽量避免使用Text类型,它不但消耗大量的网络和IO带宽,同时在该表上的DML操作都会变得很慢。...转载 2022-06-05 22:40:51 · 1525 阅读 · 0 评论 -
mysql Blob和Text类型
存储一部小说或者text类型的文档,此时考虑使用TEXT系列. TEXT系列对应Java中的String类型. 仅仅只需要把VARCHAR改成TEXT系 列 即可,Java代码不需要改动.转载 2022-06-05 22:34:24 · 4201 阅读 · 0 评论 -
tinyint和int区别
int(1)和tinyint(4) 相比,肯定int 大。转载 2022-06-05 22:30:06 · 1047 阅读 · 0 评论 -
【案例分享】如何使用数据迁移服务将大量数据快速导入到MYSQL
【摘要】 CDM(数据迁移服务)是华为云提供的界面向导式数据迁移服务,支持对关系数据库、NoSQL数据库、大数据、搜索、FTP等20多种数据源的导入导出。与传统数据迁移工具使用INSERT INTO语句导入不同,CDM会利用MYSQL本地API加速数据导入,导入速度大约提升10倍。下面介绍如何使用CDM将OBS数据导入到MYSQL。配置MYSQL参数,打开local_infile开关在数据迁移服务,创...CDM(数据迁移服务)是华为云提供的界面向导式数据迁移服务,支持对关系数据库、NoSQL数据库.转载 2022-05-26 17:33:32 · 428 阅读 · 0 评论 -
Mysql表设计时,完全使用自增主键ID进行应用开发和业务处理,会有什么问题吗
一、问题发现很多表设计(包括我们的大部分主要数据库表设计),都会有一个自定义的字符串作为业务处理字段,自增主键ID作用并不是很大,请问这样设计有没有必要性和合理性?抛弃这一个字段完全使用自增主键ID会不会有什么缺陷?二、解答解答1:自增主键要慎用。特别是数据库表自带的那种,在数据迁移和传输过程中都会带来很多问题。很多业务主键都要设计编码规则和范围,以便于表述。比如一个物料号,你可以定义其编号范围是RAW001~RAW99,前缀RAW表示原材料,后三为是序列号。这样的编码规则有利于记录转载 2022-04-05 21:53:06 · 1665 阅读 · 0 评论 -
MySQL 建表为啥还设置个自增 id ?用流水号当主键不正好么?
又要开始新项目了,一顿操作猛如虎,梳理流程加画图。这不,开始对流程及表结构了。我:吧啦吧啦吧啦 ……老大:这个建表为啥还设置个自增 id ?直接用流水号(用户号/产品号)当主键不就行了?我:这个是 DBA 规定的,创建表 id、createtime、updatetime 这三个字段都要有。《Java 开发规范》也是这么规定的。小伙伴:(附和)是的,规定的是这样的!老大:流水号在你这是唯一索引吧?设置成主键,这样就不用 id 了,还减少一次回表查询?我:…… (说的好像很有道理,咱也不敢说话。).转载 2022-04-05 21:43:36 · 2188 阅读 · 1 评论 -
Mysql命令增加、修改、删除表字段
一、方式一1、alter add 命令用来增加表的字段alter add命令格式:alter table 表名 add字段 类型 其他;alter table car_evidence add `unit_name` varchar(64) comment '单位'2、alter drop 命令删除表的字段alter drop 命令格式:alter table 表名 drop column 字段;alter table car_evidence drop column `unit转载 2022-02-22 15:53:21 · 45004 阅读 · 0 评论 -
mysql 中添加索引的三种方法(二)
mysql索引的类型和优缺点索引是一种特殊的文件(InnoDB数据表上的索引是表空间的一个组成部分),它们包含着对数据表里所有记录的引用指针。注:[1]索引不是万能的!索引可以加快数据检索操作,但会使数据修改操作变慢。每修改数据记录,索引就必须刷新一次。为了在某种程序上弥补这一缺陷,许 多SQL命令都有一个DELAY_KEY_WRITE项。这个选项的作用是暂时制止MySQL在该命令每插入一条新记录和每修改一条现有之后立刻对索引进 行刷新,对索引的刷新将等到全部记录插入/修改完毕之后再进行。在需要把许原创 2022-02-18 21:27:32 · 1543 阅读 · 0 评论 -
mysql 中添加索引的三种方法(一)
在mysql中有多种索引,有普通索引,全文索引,唯一索引,多列索引,小伙伴们可以通过不同的应用场景来进行索引的新建,在此列出三种新建索引的方法mysql 中添加索引的三种方法1.1 新建表中添加索引① 普通索引create table t_dept( no int not null primary key, name varchar(20) null, sex varchar(2) null, info varchar(20) null, index转载 2022-02-18 21:24:45 · 10575 阅读 · 0 评论 -
淘宝的数据库,主键是如何设计的?
MySQL数据库架构设计的基本功就是对于表结构的设计。如对于字段类型的选择;表的存储设计,压缩还是非压缩,如何选用压缩算法;表的访问设计,SQL还是NoSQL。这些问题看似非常简单并容易回答,然而绝大部分的答案却是错的。某些错的离谱的答案还在网上年复一年的流传着,甚至还成为了所谓的MySQL军规。其中,一个最明显的错误就是关于MySQL的主键设计。大部分人的回答如此自信:用8字节的 BIGINT 做主键,而不要用INT。以上全错。这样的回答,只站在了数据库这一层,而没有从业务的角转载 2022-02-11 23:12:12 · 1697 阅读 · 0 评论 -
订单系统订单表设计方案
一年前,在上一家公司接手了一个含有订单系统的项目,业务并不复杂,但是当时令我比较困惑的是订单表的设计。困惑的点主要是随着订单量增加,单表的存储能力将达到瓶颈,必然要采用分表的方案,那么按照什么维度拆分合适呢?分表之后带来的最大的挑战是订单查询。如果以用户为中心,采用userId取模,可以很方便的处理用户查单诉求,但是对商家或产品而言,数据就比较分散,相反如果以商家或商品为中心,则用户查单比较困难。由于对这样的业务没有成熟的经验,最后只能采取相对讨巧的方案,按照自然日期分表,考虑订单量并不大,当时转载 2022-02-11 23:06:52 · 2466 阅读 · 0 评论 -
关于mysql数据库误删除后的数据恢复操作说明
在日常运维工作中,对于mysql数据库mysql数据库mysql数据库的备份是至关重要的!数据库对于网站的重要性使得我们对mysql数据的管理不容有失!然后,是人总难免会犯错误,说不定哪天大脑短路了来个误操作把数据库给删除了,怎么办???下面,就mysql数据库误删除误删除误删除后的恢复方案进行说明。一、工作场景(1)MySQL数据库每晚12:00自动完全备份。(2)某天早上上班,9点的时候,一同事犯晕drop了一个数据库!(3)需要紧急恢复!可利用备份的数据文件以及增量的binlog文件转载 2022-01-17 16:53:02 · 6671 阅读 · 0 评论 -
mysql建表外键_mysql建表约束
建表规约1.【强制】:存储引擎必须使用InnoDB解读:InnoDB支持事物、行级锁、并发性能更好,CPU 及内存缓存页优化使得资源利用率更高。2.【强制】:每张表必须设置一个主键 ID,且这个主键 ID使用自增主键(在满足需要的情况下尽量短),除非在分库分表环境下解读:由于InnoDB 组织数据的方式决定了需要有一个主键,而且若是这个主键 ID是单调递增的可以有效提高插入的性能,避免过多的页分裂、减少表碎片提高空间的使用率。而在分库分表环境下,则需要统一来分配各个表中的转载 2021-12-30 20:06:12 · 572 阅读 · 0 评论 -
mysql的无外键设计
我在大学时上数据库的课程,学的三个范式中有个第三范式就是专指的外键约束。可是出来工作以后第一次做数据库表设计的时候,组长大佬却让我在数据库中不要使用外键,改在代码中做相应处理。说得专业点,就是不要在数据库中使用物理外键,改为使用逻辑外键,即在代码中写相关的逻辑代替外键所起的作用。我从此便懂得了,解决实际的问题要从实际出发,不能照本宣科。外键的作用1.外键能保证数据的完整性。在没有外键的情况下,数据库就不能强制进行引用完整性检查,如果在高一层没有进行正确的处理,则可能会导致数据出现不一致的情况。.转载 2021-12-30 19:54:19 · 892 阅读 · 0 评论 -
大佬的 Mybatis-Plus使用技巧,实在太好用了!
今天天就来说说 Mybatis-Plus 的那些使用技巧1、条件查询(QueryWrapper)如果说,我们需要查询的 SQL 语句如下:SELECT*FROMuser_infoWHEREage=201那么对应的代码可以为:QueryWrapper<UserInfo>queryWrapper=newQueryWrapper<>();queryWrapper.eq("age",20);List<UserInfo>li...转载 2021-09-21 15:32:02 · 1845 阅读 · 0 评论 -
mysql中一个表可以有几个唯一索引
前言mysql中一个表可以有多个唯一索引。如果能确定某个数据列只包含彼此各不相同的值,那么在为这个数据列创建索引时,就应该使用关键字UNIQUE把它定义为一个唯一索引。内容如果能确定某个数据列将只包含彼此各不相同的值,在为这个数据列创建索引的时候就应该用关键字UNIQUE把它定义为一个唯一索引。优点:简化了MySQL对这个索引的管理工作,这个索引也因此而变得更有效率。 MySQL会在有新记录插入数据表时,自动检查新记录的这个字段的值是否已经在某个记录的这个字段里出现过了;如果是,M原创 2021-09-04 04:49:50 · 7198 阅读 · 0 评论 -
@Mapper和@Repository注解的区别
在用idea写一个实现类时引用了mapper类的来调用dao层的处理,使用@Autowired注解时被标红线,找不到bean。 解决办法:在mapper加@mapper或者@repository注解。 这两种注解的区别在于: 1、使用@mapper后,不需要在spring配置中设置扫描地址,通过mapper.xml里面的namespace属性对应相关的mapper类,spring将动态的生成Bean后注入到ServiceImpl中。 2、@reposit...转载 2021-09-02 17:18:34 · 469 阅读 · 0 评论 -
Java 面试灵魂拷问之MySQL事务原理
1. 全方位剖析 MySQL 事务原子性、持久性、一致性实现原理2. 大厂面试必问:MySQL事务隔离级原理3.详解 MySQL 事务日志 Undo Log 和 Redo Log4.谈谈你对 MySQL 的 理解原子性:主要依靠undo.log日志实现,即在事务失败时执行回滚。undo.log日志会记录事务执行的sql,当事务需要回滚时,通过反向补偿回滚数据库状态持久性:主要依靠redo.log日志实现。首先,mysql持久化通过缓存来提高效率,即在select时先查缓存,再查磁盘;在upd原创 2021-08-09 18:49:02 · 499 阅读 · 0 评论 -
MySQL相关面试题
MySQL相关(1)MySQL 索引使用有哪些注意事项呢?可以从三个维度回答这个问题:索引哪些情况会失效,索引不适合哪些场景,索引规则索引哪些情况会失效查询条件包含or,可能导致索引失效 如何字段类型是字符串,where时一定用引号括起来,否则索引失效,mysql做类型转换用不到索引 like通配符可能导致索引失效。 联合索引,查询时的条件列不是联合索引中的第一个列,索引失效。 在索引列上使用mysql的内置函数,索引失效。 对索引列运算(如,+、-、*、/),索引失效。 索引字转载 2021-07-09 19:27:05 · 923 阅读 · 0 评论 -
彻底搞懂MySQL死锁
如无特殊说明,后文中,默认的事务隔离级别为可重复读(Repeated Read, RR)。 mysql版本5.7死锁的概念两个事务都持有对方需要的锁,并且在等待对方释放,并且双方都不会释放自己的锁。 InnoDB会自动检测事务死锁(wait-for graph机制),立即回滚其中某个事务,并且返回一个错误。它根据某种机制来选择那个最简单(代价最小)的事务来进行回滚。 偶然发生的死锁不必担心,但死锁频繁出现的时候就要引起注意了。 InnoDB存储引擎有一个后台的锁监控线程,该线程负责查看可能的死转载 2021-07-09 19:25:15 · 8535 阅读 · 0 评论 -
彻底搞懂MySQL表锁、行锁和叶锁
按照锁的粒度划分:行锁、表锁、页锁行锁行级锁是Mysql中锁定粒度最细的一种锁,表示只针对当前操作的行进行加锁。可能会出现死锁的情况共享锁用法(Shared Locks 简称S锁 读锁):若事务T对数据对象A加上S锁,则事务T可以读A但不能修改A,其他事务只能再对A加S锁,而不能加X锁,直到T释放A上的S锁。这保证了其他事务可以读A,但在T释放A上的S锁之前不能对A做任何修改。#共享锁就是允许多个线程同时获取一个锁,一个锁可以同时被多个线程拥有select ... lock in s转载 2021-07-09 19:17:15 · 809 阅读 · 0 评论 -
彻底搞懂mysql日志系统binlog,redolog,undolog
本文主要总结下重做日志(redo log)、回滚日志(undo log)、二进制日志(binlog)的概念。redo log 是物理日志,undo log 和 binlog 是逻辑日志 binlog二进制日志是server层的无论MySQL用什么引擎,都会有的,主要是左主从复制,时间点恢复使用 redo log重做日志是InnoDB存储引擎层的,用来保证事务安全 undo log回滚日志保存了事务发生之前的数据的一个版本,可以用于回滚,同时可以提供多版本并发控制下的读(MVCC),也即非锁定读c转载 2021-07-08 20:07:30 · 742 阅读 · 0 评论 -
Redis与MySQL双写一致性如何保证?
前言四月份的时候,有位朋友去美团面试,他说被问到Redis与MySQL双写一致性如何保证? 这道题其实就是在问缓存和数据库在双写场景下,一致性是如何保证的?本文将跟大家一起来探讨如何回答这个问题。公众号:捡田螺的小男孩 github地址,感谢每一颗star谈谈一致性一致性就是数据保持一致,在分布式系统中,可以理解为多个节点中数据的值是一致的。强一致性:这种一致性级别是最符合用户直觉的,它要求系统写入什么,读出来的也会是什么,用户体验好,但实现起来往往对系统的性能影响大 弱一致性转载 2021-05-25 16:56:26 · 365 阅读 · 0 评论 -
一张图搞懂MySQL的索引失效
索引对于MySQL而言,是非常重要的篇章。索引知识点也巨多,要想掌握透彻,需要逐个知识点一一击破,今天来先来聊聊哪些情况下会导致索引失效。图片总结版全值匹配(索引最佳)explainselect*fromuserwherename='zhangsan'andage =20andpos ='cxy'andphone ='18730658760';和索引顺序无关,MySQL底层的优化器会进行优化,调整索引的顺序explain select * ...转载 2021-04-21 09:34:27 · 364 阅读 · 0 评论 -
java.sql.SQLSyntaxErrorException: You have an error in your SQL syntax; 解决方案
SQL语法错误异常原因有很多种,这里是因为字段名使用关键字。异常信息:2021-03-30 09:58:03.820 [http-nio-8089-exec-1] bond-crm ERROR druid.sql.Statement 149 - {conn-10010, pstmt-20000} execute error. select id, name, display_name, group, group_display_name, remark, create_time,...原创 2021-03-30 10:18:26 · 35352 阅读 · 0 评论 -
数据库报错create connection SQLException,............ errorCode 1129, state HY000
报错:com.alibaba.druid.pool.DruidDataSource : create connection SQLException, url: jdbc:mysql://mysql:3306/config?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=Asia/Shanghai, errorCode 1129, state HY000错误:Host is blocke...转载 2021-03-23 14:58:42 · 4791 阅读 · 0 评论 -
关于mybatis框架中update和delete返回值问题
问题:新手向求助下,如果使用注解,更新和删除怎样设置才会可以拿到受影响行数?在xml中配置的话,默认就可以得到,单数注解怎么能获取这个受影响行数呢???顺便咨询下大佬们,怎么判断mybatis增删改是否成功的,使用try...catch...捕获异常吗?我觉得如果用这个捕获异常,添加操作倒是可以判断是否成功,但是更新和删除就不行了,求解决办法解答:1、2、...原创 2021-03-11 11:08:16 · 628 阅读 · 0 评论 -
Caused by: java.lang.IllegalArgumentException: Result Maps collection already contains value for com
这个错误是我练习springBoot整合mybatis时报的错.org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'practice': Unsatisfied dependency expressed through field 'userService'; nested exception is org.springframework.beans.facto转载 2021-03-02 16:51:21 · 2732 阅读 · 0 评论 -
springboot中如何使用事务
事务是我们在项目开发中必不可少的元素,大部分的业务操作都是多步操作完成的,而这多步操作必须要同时完成或同时失败,否则业务便失去了完整性,一定会出问题。比如做保存用户的操作:(1)保存用户到数据库(2)记录用户操作日志。如果第(1)和第(2)步之间出了问题,如果没有事务的话,可能导致用户记录到了数据库,但日志里面却没有记录,造成业务不完整。如果加入了事务,那么就可以避免这种问题。下面我们用代码来验证:1、首先是不加事务的代码其中先保存user到数据库,然后打印1/0,这步会报错,然转载 2021-02-28 21:48:22 · 5981 阅读 · 0 评论 -
Mybatis插件之自动生成,不使用默认的驼峰式
数据库里面表的字段中带有“”_“下划线,我们知道插件默认的是将这些带有下划线的字段默认的变成“优美的驼峰式”的。表是肯定不能动的,实体类的字段也是非常多,改起来非常麻烦,所以就研究了下面这种依靠代码来实现的方式。只需要在generatorConfig.xml中加入:<!--使用实际的字段名--><property name="useActualColumnNames" value="true"/>就可以生成实际字段名的实体类:package com.sbk...转载 2021-02-26 18:00:11 · 2206 阅读 · 0 评论 -
MyBatis动态批量插入、更新Mysql数据库的通用实现方案
一、业务背景 由于需要从A数据库提取大量数据同步到B系统,采用了tomikos+jta进行分布式事务管理,先将系统数据源切换到数据提供方,将需要同步的数据查询出来,然后再将系统数据源切换到数据接收方,进行批量的插入和更新操作,关于数据源的切换可以参考之前的文章《spring+springMVC+Mybatis架构下采用AbstractRoutingDataSource、atomikos、JTA实现多数据源灵活切换以及分布式事务管理》二、批量插入的具体实现 1.查询需要同步的数据:@转载 2020-11-12 16:24:52 · 810 阅读 · 0 评论 -
Mysql 中,这 21 个写 SQL 的好习惯,你值得拥有呀
前言每一个好习惯都是一笔财富,本文分SQL后悔药, SQL性能优化,SQL规范优雅三个方向,分享写SQL的21个好习惯。1. 写完SQL先explain查看执行计划(SQL性能优化)日常开发写SQL的时候,尽量养成这个好习惯呀:写完SQL后,用explain分析一下,尤其注意走不走索引。explain select * from user where userid =10086 or age =18;2、操作delete或者update语句,加个limit(SQL后悔药)在执行转载 2020-11-06 19:59:19 · 277 阅读 · 0 评论 -
mysql数据库在建表的时候,这个表最合理是建多少个字段合适?也就是说最好有多少列最合理?
本文关于字段、记录、行大小的数量限制和合理取值。字段数量以mysql为例,实践经验是不超过20的字段。字段首先符合设计范式要求,自然就有合理的字段数量了,其次假设当某表的字段仍然太多时,可以根据业务情况进行拆分,比如根据常用字段和非常用字段将一张表拆分成两张。Row Size单条记录的大小不应超过硬盘的扇区大小,一般是4k单张表多少个字段其实没有什么定论,只要不超过数据库限定的个数就好,但是表的单条记录的大小是有合理空间的,也就是需要根据具体硬件和操作系统来确定单条记录(row si原创 2020-11-06 16:31:16 · 13533 阅读 · 0 评论