
数据库
文章平均质量分 89
夜晚在编程
有空就写写代码
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
mysql的B+树机制说明
转自https://www.cnblogs.com/leefreeman/p/8315844.htmlInnoDB一棵B+树可以存放多少行数据?一个问题?InnoDB一棵B+树可以存放多少行数据?这个问题的简单回答是:约2千万。为什么是这么多呢?因为这是可以算出来的,要搞清楚这个问题,我们先从InnoDB索引数据结构、数据组织方式说起。我们都知道计算机在存储数据的时候,有最小存储单元,这就好比我们今天进行现金的流通最小单位是一毛。在计算机中磁盘存储数据最小单元是扇区,一个扇区的大小是5.转载 2021-03-10 10:54:29 · 396 阅读 · 0 评论 -
mysql索引说明
前言项目采用开源数据库mysql比较多,使用数据库,绕不开索引,这里简单对mysql索引做个说明。索引类型mysql 索引有五种:主键索引、 唯一索引、普通索引 、全文索引、组合索引。来看看各自特点:主键索引(PRIMARY)它 是一种特殊的唯一索引,不允许有空值。唯一索引(UNIQUE)与"普通索引"类似,不同的就是:索引列的值必须唯一,但允许有空值。普通索引(INDEX)最基本的索引,没有任何限制。全文索引(FULLTEXT )用于在一篇文章中,检索文本信息的, 针对较大的数据原创 2021-01-17 17:27:59 · 103 阅读 · 0 评论 -
mybatis插入记录的主键自增赋值机制说明
前言现在的项目实践中,表设计一般采用自增主键,那么在这当中会涉及到数据插入后,获取插入数据主键的一个场景处理。对于这种情况,mybatis框架做了封装,提供了支持。代码说明通过debug方式,跟进执行路径,查看对应逻辑代码。1、找到执行入口这里的参数赋值有三个,但不包括id的赋值,id是由数据库自增。这里看到一个KeyGenerator的类型,这个名字name的很好,自说明性很好。2、看看keyGenerator的执行逻辑这里可以看出,参数类型的id依然是空,但是上图的sql执行已结原创 2020-12-28 15:21:39 · 995 阅读 · 2 评论 -
mysql数据库表信息-字段信息获取方案实践
前言近期一个项目有字段权限需求,需要对用户、角色进行字段权限的配置。那么延伸出来一个需求:对字段配置主数据的初始化。这里所用的数据库产品是mysql,mysql的information_schema库中存有我们需要的信息。接下来一段代码处理。代码实践package com.xxx.init;import java.sql.ResultSet;import java.sql.ResultSetMetaData;import java.sql.SQLException;import java.原创 2020-07-27 14:50:48 · 272 阅读 · 0 评论 -
dbflute的使用小结
前言公司有个项目,之前是外包的,框架采用的是springmvc+spring+dbflute这样的方式。这个项目陆续有需求要上线,考虑到维护性,计划迁移到新的框架。但是迁移的工作量,相对较大,有些需求还是得在老的工程上调整,所以对这块框架代码做了了解熟悉。在这个熟悉过程中,采用了springboot集成的方式,接下来看下实践的过程。配置pom.xml配置<dependency> <groupId>org.dbflute</groupId>原创 2020-07-21 11:09:27 · 1073 阅读 · 0 评论 -
数据权限-数据字段列权限设计方案-mybatis(SqlSource)
前言在上一篇文章 数据权限-数据列权限设计方案-mybatis(BoundSql)中提到对boundsql修改,在新版mybatis下会失效。本文阐述通过sqlSource注入来达到目标。分析boundsql注入失效原因,来看下mybatis中MappedStatement类源码:/** * Copyright 2009-2019 the original author or authors. * * Licensed under the Apache License, Vers原创 2020-07-13 19:57:17 · 2690 阅读 · 0 评论 -
数据权限-数据列权限设计方案-mybatis(BoundSql)
前言项目实践中,基本都会有权限的需求,权限需求分为两大块:1、功能权限;2、数据权限。而数据权限又可在行和列上细分为两块,即数据范围权限:用户能看到哪些行的记录;数据字段权限:用户能看到这些行对应的哪些字段。本文以字段权限为例做一个demo展示。方案字段权限方案也有很多种,这里采用配置无权限字段,在sql查询前,对sql进行拦截过滤,剔除无权限字段。框架这里采用mybatis作为ORM框架。配置配置pom依赖 <!-- mybatis --> <dep原创 2020-07-06 17:30:52 · 2960 阅读 · 0 评论 -
sql优化-mysql执行计划调优实践
第一版sqlexplain SELECT COUNT(*) AS waitFinancialReviewCount FROM clai_base WHERE clai_base.obj_status = 1 AND EXISTS ( SELECT clai_financial_review_process.id FROM clai_financial_review_process INNER JOIN user_rel_permission ON user_rel原创 2020-11-10 22:43:06 · 164 阅读 · 0 评论 -
sql优化-mysql子查询索引失效问题解决
问题生产某些功能执行较慢,找出来对应的sql,看看执行计划,入下:sql:SELECT COUNT( 1 ) FROM fich_base t1 LEFT JOIN cont_base t2 ON t1.contract_id = t2.id LEFT JOIN orga_base t3 ON t3.id = t1.transfer_organization_id LEFT JOIN user_base t4 ON t4.id = t2.sale_user_id LEFT JOIN em原创 2020-11-05 17:58:19 · 2969 阅读 · 10 评论 -
SQL state ‘23000‘, error code ‘1062‘, message [Duplicate entry ‘2‘ for key ‘PRIMARY‘]-batch批处理问题小结
场景使用batch方式在mysql数据库插入数据,源数据表A数据如下:A这张表是没有主键约束的。从A查询这些数据,插入到相同表结构的B表中。B表的id是主键约束。插入结果如下:可以看出,重复的保留了一条,且是后面一条。并且前面的重复对后面的数据插入没有影响。在批处理执行完后抛出DuplicateKeyException。总结批处理,需要考虑对数据库约束去重,避免脏数据或丢数据。...原创 2020-11-03 17:05:00 · 1368 阅读 · 0 评论 -
Mybatis-generator+maven实践
前言应用中数据库访问ORM框架采用mybatis,如果采用配置文件方式,那么配置文件怎么来,一种是按照规则手写,另一种是自动生成,当然本身也是可以实践这种自动生成的工具,只是mybatis已有相关生成插件,拿来用即可。原理这里比较简单,就用文字描述了:maven执行generator插件,解析配置,同数据库建立连接,获取指定表信息,并生成映射的java model文件和dao层的mapper及mapper配置文件,跟进配置中的目录信息,将以上三类文件写入对应的目录。实践配置插件在pom文件中加入原创 2020-06-16 20:04:40 · 365 阅读 · 0 评论 -
Springboot2.1.1+shardingsphere3.1.0实践
前言业务的增长带来数据量增长,应用可以水平扩展,同样数据也需要考虑水平扩展,以下基于springboot2.1.1、shardingsphere3.1.0实践数据分片。对于shardingsphere组件,这里使用了sharding-proxy部分的配置功能;sharding-proxy配置支持数据分片、读写分离、数据分片+读写分离、数据治理。以下示例基于单业务库主从+读写分离+业务分表。配置配置pom.xml依赖 <dependency> <groupId>or原创 2020-06-15 20:42:53 · 591 阅读 · 0 评论 -
mysql同步数据日期问题处理
#前言项目组同学,反馈一个数据同步问题,说是跨库日期读取、更新出现不一致。第一反应,1、是不是有默认值 2、时区配置。既然问题来了,就穿擦了个时间协助排查。#场景通过接口,从库A取出时间更新到库B,发生了变化,差了一天。#解决1、检查是否有字段存在默认值或者其他触发动作,结果:默认为空,无其他动作。2、检查库A、库B的访问时区配置,结果库A为指定时区。完善配置 serverTimezone=Asia/Shanghai,解决。参考配置如下:url: jdbc:mysql://xxxx:3306原创 2020-06-10 12:31:58 · 310 阅读 · 0 评论 -
Mysql 正则表达式使用
#前言mysql在8.0版本支持正则表达的方法有了丰富,具体如下:本文重点举了regexp几个例子供参照。也是因为现在用的库只支持这个方法。https://dev.mysql.com/doc/refman/8.0/en/regexp.html#规则语义#语法Column regexp 表达式#实践select * from vin_code_temp where vehicle_model REGEXP ‘([0-9]\.[0-9]T)’ ,查询出包含‘5.0T’ 这种格式的数据。S原创 2020-06-05 18:50:21 · 277 阅读 · 1 评论