数据库
文章平均质量分 91
weixin_43751710
这个作者很懒,什么都没留下…
展开
-
Mybatis底层实现原理
参考:https://www.cnblogs.com/qingchen521/p/10327440.htmlhttps://blog.csdn.net/w372426096/article/details/82622418Mybatis底层原理终于发现,原来Mybatis的底层原理是涉及到动态代理的,想想我们是如何使用Mybatis的?有一个接口类,有一个xml类型的Mapper,将xml...转载 2019-06-13 21:28:11 · 6921 阅读 · 0 评论 -
在mybatis中$和# 的区别
在MyBatis中,我们一般使用“#”来进行占位https://www.cnblogs.com/xdyixia/p/7844984.html1、占位符##是占位符的意思,它可以防止SQL注入。在Mybatis中,使用#{},相当于jdbc中用PreparedStatement。#{}表示一个占位符号,通过#{}把parameterType 传入的内容通过preparedStatement...转载 2020-04-05 21:23:09 · 113 阅读 · 0 评论 -
MySQL的锁
https://www.cnblogs.com/volcano-liu/p/9890832.html对于InnoDB引擎InnoDB共有七种类型的锁:共享/排它锁(Shared and Exclusive Locks)意向锁(Intention Locks)记录锁(Record Locks)间隙锁(Gap Locks)临键锁(Next-key Locks)插入意向锁(Insert...转载 2020-03-26 10:24:40 · 135 阅读 · 0 评论 -
数据库三范式与反三范式
第一范式字段不可分,保证字段的原子性,字段不能是集合、多个值。下面第二行是违反第一范式的:第二范式有主键,非主键字段依赖主键。第二范式(2NF)是在第一范式(1NF)的基础上建立起来的,即满足第二范式(2NF)必须先满足第一范式(1NF)。第二范式(2NF)要求数据库表中的每个实例或行必须可以被惟一地区分。为实现区分通常需要我们设计一个主键来实现(这里的主键不包含业务逻辑)。即满足第...转载 2020-03-25 15:41:37 · 588 阅读 · 0 评论 -
MySQL引擎
数据库索引分类以及引擎分类转载 2020-03-20 15:03:12 · 82 阅读 · 0 评论 -
SQL与nosql区别以及优缺点
SQLSQL是关系型数据库,采用关系模型来组织数据结构的数据库(二维表)。关系型数据库最典型的数据结构是表,由二维表及其之间的联系所组成的一个数据组织常见的有:le、DB2、SQLServer、Mysql、SQLite都是关系型数据库优点易于维护:容易理解,它的逻辑类似常见的表格使用方便:都使用sql语句,sql语句非常的成熟复杂查询:支持SQL,可用于一个表以及多个表之间非常复...转载 2020-03-19 12:09:25 · 3740 阅读 · 0 评论 -
MySQL主从
MySQL主从转载 2020-03-17 11:23:14 · 161 阅读 · 0 评论 -
分库分表mycat
分库分表mycat转载 2020-03-17 10:18:09 · 173 阅读 · 0 评论 -
MySQL为什么选择B+树作为索引结构?
MySQL为什么选择B+树作为索引结构?转自:http://www.gxlcms.com/mysql-366759.html1、平衡二叉树(AVL):旋转耗时缺点:由于旋转的耗时,AVL树在删除数据时效率很低AVL树是严格的平衡二叉树,所有节点的左右子树高度差不能超过1;AVL树查找、插入和删除在平均和最坏情况下都是O(lgn)。AVL实现平衡的关键在于旋转操作:插入和删除可能破坏二叉树...转载 2020-03-05 12:13:00 · 218 阅读 · 0 评论 -
Redis集群(主从、哨兵、分片)
Redis集群当满足需求时,我们可以只在一台服务器上部署Redis数据库,其他的服务器通过IP、端口等访问这台服务器即可。但是当一台服务器难以满足时,我们就需要在多台机器上部署一个Redis集群,来满足需求。Redis集群中主要有如下几种核心功能:主从复制哨兵模式分片分区主从复制需求为了避免单点故障,可选的做法是将数据库复制多个副本以部署在不同的服务器上,这样即使有一台服务器...转载 2020-03-05 11:06:36 · 1716 阅读 · 0 评论 -
Redis并发问题及分布式锁
Redis并发问题既然Redis是单线程,那么它为什么会有并发的问题。理论上来说,Redis是按顺序执行修改操作,不会有多个线程同时修改的情况。但假如有这种场景下:有一个字符串,key 为 a,value 为 1 。两个客户端同时对 a 进行加 1 。他们同时获取到 a 的值为 1 ,同时向Redis发出请求,将 a 值改为 2 。这样并发问题就产生了。Redis本身是按顺序执行的,它...转载 2020-03-05 10:30:07 · 475 阅读 · 0 评论 -
Redis详细介绍
目录Redis是什么Redis数据类型Redis是单线程为何还那么快Redis 单线程如何处理并发连接Redis的持久化RDB(默认)AOFRDB+AOF混合模式选择哪种模式Redis的发布订阅Redis的事物Redis集群主从复制哨兵模式分片分区Redis分布式锁为什么Redis是单线程,却还需要锁。Redis是什么redis是nosql(也是个巨大的map) 单线程,但是可处理1秒10w的...转载 2020-03-04 21:16:23 · 451 阅读 · 0 评论 -
死锁的形成及解决方法(如何排查死锁)
死锁的解决方法产生死锁的四个必要条件:(1) 互斥条件:资源不能共享,一个资源每次只能被一个进程使用。(2) 请求与保持条件:一个进程因请求资源而阻塞时,对已获得的资源保持不放。(3) 不剥夺条件:进程已获得的资源,在末使用完之前,不能强行剥夺。(4) 循环等待条件:若干进程之间形成一种头尾相接的循环等待资源关系。1.安全序列我们首先引入安全序列的定义:所谓系统是安全的,是指系统中的...转载 2019-05-20 20:11:19 · 1331 阅读 · 0 评论 -
乐观锁与悲观锁
首先介绍一些乐观锁与悲观锁:悲观锁: 总是假设最坏的情况,每次去拿数据的时候都认为别人会修改,所以每次在拿数据的时候都会上锁,这样别人想拿这个数据就会阻塞直到它拿到锁。传统的关系型数据库里边就用到了很多这种锁机制,比如行锁,表锁等,读锁,写锁等,都是在做操作之前先上锁。再比如Java里面的同步原语synchronized关键字的实现也是悲观锁。乐观锁: 顾名思义,就是很乐观,每次去拿数...转载 2019-05-20 19:55:12 · 117 阅读 · 0 评论 -
为什么MySQL的字段尽量为not null
使用not null的好处节省空间,需要一个额外字节作为判断是否为NULL的标志位(空值不占空间)。影响索引,Mysql难以优化引用可空列查询,它会使索引、索引统计和值更加复杂,索引的效率会下降很多。且对表索引时不会存储NULL值的。NULL不能用 = 来判断,必须要is null等函数进行判断,应用不方便...转载 2020-03-03 16:32:20 · 287 阅读 · 0 评论 -
建表时指定为bTree的索引
CREATE TABLE `supplier_activity` ( `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键id', `activity_id` bigint(20) DEFAULT NULL COMMENT '所属活动id', PRIMARY KEY (`id`), KEY `idx_activity_id` (`a...转载 2019-12-15 21:46:38 · 1164 阅读 · 0 评论 -
Redis常见问题(缓存穿透、热key)
啥是Redis的缓存穿透呢?缓存穿透,就是如果从数据库中查出的是null,存入Redis的就也是null,然后如果有人不停的查,就相当于是不停的查数据库,(因为是null,所以跳过了或者是透过了Redis),请求的多了可能就把数据库弄崩了。解决的办法,就是在查询数据库后,判断一下,如果为null,赋值空集合。(空集合不是null)List<Coupon> list = null;...转载 2019-12-15 21:43:17 · 293 阅读 · 0 评论 -
MySql的CONCAT关键字(group by 时需要的group_concat)
https://baijiahao.baidu.com/s?id=1595349117525189591&wfr=spider&for=pcCONCAT连接字符串:模糊查询的匹配条件中使用anda.front_brand_name like CONCAT('%',#{frontBrandName,jdbcType=VARCHAR},'%')group_concat()函...转载 2019-11-13 16:59:59 · 869 阅读 · 0 评论 -
Mybatis插入数据同时获取主键ID
遇到了这样的情况用Mybatis插入主任务的时候,同时要把子任务插入到数据库中。但是子任务需要主任务的ID,而主任务的ID是数据库自增的主键,那怎么获取呢?需要在Mybatis的插入语句前加入这一句话。<selectKey resultType="java.lang.Long" keyProperty="ID" order="AFTER" > SELECT LAST_INS...原创 2019-11-13 16:57:56 · 840 阅读 · 0 评论 -
SQL优化案例
原SQL如下:selectb.id, a.b_pin, a.c_pin, b.vender_id, b.fx_status, b.fx_start_time, b.fx_end_time,a.store_name, a.vender_company_name, a.store_addr_det, a.store_business_type,a.store_type_cd, a.store_...原创 2019-11-11 22:00:13 · 156 阅读 · 0 评论 -
MySQL中的distinct含义
https://www.cnblogs.com/koal/p/4526633.htmldistinct的意思是不重复,可以用在统计里转载 2019-10-27 17:37:52 · 856 阅读 · 0 评论 -
MySQL中的 unsigned
https://www.cnblogs.com/qiantuwuliang/archive/2009/11/22/1608157.htmlunsigned 为“无符号”的意思unsigned 既为非负数,用此类型可以增加数据长度!例如如果 tinyint最大是127,那 tinyint unsigned 最大 就可以到 127 * 2unsign...转载 2019-10-27 17:20:39 · 141 阅读 · 0 评论 -
MySQL最左原则及索引对读写的影响
MySQL索引对读写的影响我们知道MySQL的索引是B+树的数据结构,但是MySQL的索引到底是如何影响到数据库的效率的呢?主要有两点:一、减慢了写入的速度几乎所有的人都知道索引可以加快查询(也就是读出)的速度,但并不是所有的人都知道,索引会减慢写的速度(比如之前的我……)。之前说过,MySQL的索引是B+树的数据结构,这样的结构可以有效的提升查询的速度,因为它是有序的,而有序的平衡树查找...转载 2019-06-06 19:52:43 · 1143 阅读 · 0 评论 -
MySQL查询某个时间段内的字段,使用的日期是String类型,但数据库中是时间戳
MySQL查询某个时间段内的字段,使用的日期是String类型在Java中,想要实现对数据库中的特殊查询——查询某个时间段内的字段,但是传入的日期值是String型,而数据库中的日期是时间戳……可以使用如下方法:比如: ’ 2019-05-14 00:00:00 ’ 到 ’ 2019-05-16 24:00:00 ’ ,且只想直接用这个字符串,不想转换成时间戳等等。可以这样:1、直接使用...转载 2019-05-16 20:30:21 · 6431 阅读 · 1 评论 -
BigDecimal与int、long的转换
BigDecimal与int、long的转换在与数据库交互时,java总是要面对数据类型的转换,其中数据库的sum函数总是会返回BigDecimal的类型,下面是BigDecimal类型转换的总结int 转换成 BigDecimal 数据类型 //int 转换成 bigDecimal类型 public static void intToBigDecimal(){ ...转载 2019-05-16 20:22:55 · 3589 阅读 · 0 评论 -
数据库中时间戳与java中的时间类型、String类型的转换
java.sql.Timestamp cannot be cast to java.lang.Longjava.util.Date与的java.sql.Timestamp互转java.sql.Timestamp---->java.util.Date(二者是父子关系,可以直接赋值,自动转换)/** * 将java.sql.Timestamp对象转化为java.util.Date对象 ...转载 2019-05-20 20:30:54 · 7860 阅读 · 0 评论 -
查找MySQL数据库user表中是否存在ID=1的记录
查找MySQL数据库user表中是否存在ID=1的记录如果直接查找该字段的值,会报错说该字段不存在(null)所以应当按如下方式查找:(查找该ID的个数)String SQL = "select count(*) from user where phone_id=?"; count=jdbcTemplate.queryForInt(SQL,new Object[] {phone_id})...原创 2019-05-02 17:05:02 · 5263 阅读 · 0 评论 -
MySQL字符串与时间戳的转换
在Java中,想要实现对数据库中的特殊查询——查询某个时间段内的字段,但是传入的日期值是String型,而数据库中的日期是时间戳……可以使用如下方法:数据库的有字符串转换为时间戳的函数unix_timestamp(?)。public int countNum(String startTime, String endTime) { String SQL = "SELECT left(c...转载 2019-05-06 20:13:47 · 1543 阅读 · 0 评论 -
从数据库中取时间值,遇到:java.sql.Timestamp cannot be cast to java.lang.Long
将 java.sql.Timestamp 类型转换为 java.util.Date 类型。二者其实是父子关系,直接 Date d = (Date)时间戳 就可以了。Date d = (Date)时间戳或者用以下的方法。public static java.util.Date timeToDate(java.sql.Timestamp time) { return t...原创 2019-04-17 13:04:30 · 18091 阅读 · 0 评论 -
MySQL语句优化策略(待完善)
MySQL语句基础优化策略:第一、不使用select * ……这样的语句。老老实实将需要的字段写出来,如select name……这样的,除非是整张表的数据字段都要使用。第二、永远不要讲or作为顶层条件。有or的放在括号()里,顶层条件必须用and。如:where a=1 and b=3 and … or ccc=33 … , 这种是等于 where ( a=1 and b=3 and …...转载 2019-06-06 20:01:52 · 104 阅读 · 0 评论 -
MySQL的batch模式
MySQL的batch模式MySQL的batch模式,其实也就是批处理模式。它比一条条插入的效率高多了。这是从网上copy下来的例子:首先使用普通的方式插入100万条数据,使用时间81948毫秒程序如下:public class Test { public static void main(String[] args) throws ClassNotFoundException,...转载 2019-06-06 20:03:30 · 4456 阅读 · 0 评论 -
Redis基础命令
刚刚在菜鸟联盟里学习了Redis的基础,将基础命令记录下来,方便使用。Redis属于NoSQL(not only SQL),类似于map,是key-value型的数据库设置键值对:(键为age,值为2)set age 2删除键值对:DEL age检查键值对是否存在:EXISTS age查找所有符合给定模式 pattern 的 key :KEYS runoob*设置哈希s...转载 2019-05-29 20:10:49 · 180 阅读 · 0 评论 -
MongoDB入门+常用语句
MongoDB简介MongoDB 是由C++语言编写的,是一个基于分布式文件存储的开源数据库系统。在高负载的情况下,添加更多的节点,可以保证服务器性能。MongoDB 旨在为WEB应用提供可扩展的高性能数据存储解决方案。MongoDB 将数据存储为一个文档,数据结构由键值(key=>value)对组成。MongoDB 文档类似于 JSON 对象。字段值可以包含其他文档,数组及文档...转载 2019-05-29 20:33:46 · 236 阅读 · 0 评论 -
事务隔离
转自:https://www.cnblogs.com/fjdingsd/p/5273008.html四大特性本篇讲诉数据库中事务的四大特性(ACID),并且将会详细地说明事务的隔离级别。如果一个数据库声称支持事务的操作,那么该数据库必须要具备以下四个特性:⑴ 原子性(Atomicity) 原子性是指事务包含的所有操作要么全部成功,要么全部失败回滚,这和前面两篇博客介绍事务的功能是一样...转载 2019-06-13 21:12:58 · 121 阅读 · 0 评论 -
SpringBoot+Redis实现缓存
SpringBoot+Redis实现缓存的实例参考下面的博客做的:https://blog.csdn.net/junmoxi/article/details/80913060因为我用的版本有些老,所以引入的jar包等会有一些不一样。第一步、加入依赖的jar包 <!-- Redis需要的jar包 --> <!-- <dependency> --&...转载 2019-06-13 21:19:34 · 138 阅读 · 0 评论 -
覆盖索引
参考:https://blog.csdn.net/qq_15037231/article/details/87891683什么是覆盖索引覆盖索引其实不是一种索引的类型,而是指查询时,需要查询出的列需要被使用到的索引覆盖。百度百科:就是select的数据列只用从索引中就能够取得,不必从数据表中读取,换句话说查询列要被所使用的索引覆盖。实例举个例子来说表中有150多万的数据,也已经建立...转载 2019-06-13 21:32:58 · 241 阅读 · 0 评论 -
MySQL索引结构(B+树、聚簇索引)以及聚簇索引、主键索引、唯一索引三者区别
参考:http://blog.jobbole.com/24006/基本定义MySQL官方对索引的定义为:索引(Index)是帮助MySQL高效获取数据的数据结构.注意:索引是一种数据结构!索引的作用——查询数据库查询是数据库的最主要功能之一。我们都希望查询数据的速度能尽可能的快,因此数据库系统的设计者会从查询算法的角度进行优化。最基本的查询算法当然是顺序查找(linear search)...转载 2019-06-05 08:27:04 · 1707 阅读 · 0 评论 -
B+树索引和哈希索引的区别
https://www.cnblogs.com/heiming/p/5865101.html下面是MySQL中建表时创建索引CREATE TABLE t(aid int unsigned not null auto_increment,userid int unsigned not null default 0,username varchar(20) not null default ...转载 2019-07-31 22:25:09 · 243 阅读 · 0 评论 -
MySQL常用语句
MySQL常用语句连接远程主机MySQL: mysql -h主机IP -u root -p密码创建数据库: CREATE DATABASE 数据库名;(information_schema mysql performance_schema sys四个为系统数据库)删除数据库: DROP DATABASE 数据库名;使用数据库: USE 数据库名;(use Sec...原创 2019-04-15 08:22:12 · 99 阅读 · 0 评论