数据库
文章平均质量分 67
数据库
Vance.
时光如流水。
展开
-
数据同步神器Canal
简介canal是阿里巴巴的一个开源项目,基于java实现,已经在很多大型的互联网项目生产环境中使用,包括阿里、美团等都有广泛的应用,是一个非常成熟的数据库同步方案,基础的使用只需要进行简单的配置即可。canal是通过模拟成为mysql的slave的方式,监听mysql的binlog日志来获取数据,binlog设置为row模式以后,不仅能获取到执行的每一个增删改的脚本,同时还能获取到修改前和修改后的数据,基于这个特性,canal就能高性能的获取到mysql数据数据的变更。canal分为serv原创 2021-08-28 14:08:19 · 1636 阅读 · 0 评论 -
redis 缓存穿透、雪崩、击穿
缓存穿透概念缓存穿透的概念很简单,用户想要查询一个数据,发现redis内存数据库没有,也就是缓存没有命中,于是向持久层数据库查询。发现也没有,于是本次查询失败。当用户很多的时候,缓存都没有命中,于是都去请求了持久层数据库。这会给持久层数据库造成很大的压力,这时候就相当于出现了缓存穿透。“穿透”的意思就是穿过redis进入到DB。下图是一个简单的缓存实现:...原创 2021-05-29 13:28:09 · 207 阅读 · 0 评论 -
mysql 乐观锁、悲观锁
前言悲观锁与乐观锁本质上不是数据库中具体的锁,而是人们定义出来的概念,可以理解为一种思想,是处理并发问题的常用手段(方法)。可以将数据库中的行锁,表锁,排他锁,共享锁根据这种锁思想进行分类。乐观锁的实现方式一般来说,有两种:版本号和时间戳。使用数据版本(Version)记录机制,这是乐观锁最常用的一种实现方式。通过为数据库表增加一个数字类型的 “version” 字段来实现。当读取数据时,将version字段的值一同读出,数据每更新一次,就对此version值加一。当提交更新的时.原创 2021-05-29 12:52:24 · 152 阅读 · 0 评论 -
mysql 行级锁
前言锁,是执行多线程时用于限制资源访问的一种同步机制。行级锁数据库锁根据锁的粒度可分为行级锁、表级锁、页级锁。行级锁是MySQL中粒度最小的一种锁,表示只对当前操作的数据行进行加锁。粒度越小,实现的成本也就越高。INNODB的行级锁有共享锁(S锁)和排他锁(X 锁)两种。共享锁允许所有事务读取某些数据,不允许任何事务修改这些数据。排他锁允许当前事物删除或更新或读取某些数据,其他事务不能删除或更新或读取这些数据。另外,MYISAM引擎只支持表级锁,而INNODB引擎能够支持行级锁。...原创 2021-05-29 12:43:16 · 1176 阅读 · 0 评论 -
mysql 表锁
准备测试数据1.建立两个表,分别为S和T,插入一些数据原创 2021-05-29 12:36:00 · 222 阅读 · 0 评论 -
mysql 读锁和写锁
读锁:又称共享锁(S锁)。若事务T对数据对象A(某一资源)加上S锁,则事务T可以读A但不能修改A。其它事务也只能读A但不能修改A。并且,其他事务只能再对A加S锁,不能加X锁,除非T释放A上的S 锁。简单的说,自己只能读,别人也只能读。写锁:又称排他锁(X锁)、独占锁。若事务T对数据对象A(某一资源)加上X锁,事务T可以读A也可以修改A。其它事务不能读A也不能修改A。并且,其他事务不能再对A加任何锁(共享锁或排他锁),直到T释放A上的锁。简单的说,自己可读可写,别人不可读不可写。行级锁操作加排它锁原创 2021-05-23 18:03:23 · 2132 阅读 · 0 评论 -
mysql 表级锁之读锁、写锁
语法lock tables tablename read/write或lock table tablename read/write表级锁-读锁当MySQL的一个进程为某一个表开启读锁之后,其他的进程包含自身都没有权利去修改这个表的内容。但是,所有的进程是可以读这个表的内容的,只是不能实现更新。另外,其它进程只有等待该进程释放读锁之后,才可以更新数据,否则,其他的进程一直处于等待状态。简言之,开启读锁,所有进程拥有读权限,没有写权限,关闭读锁,所有进程拥有读写权限。表级锁..原创 2021-05-23 17:54:55 · 779 阅读 · 0 评论 -
mysql 全局锁、表级锁、行级锁
一.什么是锁锁,其实就是计算机在执行多线程或线程时用于并发访问同一共享资源时的一种同步机制,MySQL中的锁是在服务器层或存储引擎层实现的,保证了数据访问的一致性与有效性。二、全局锁、表级锁、行级锁1.全局锁全局锁就是对整个数据库实例加锁,MySQL提供了一个加全局读锁的方法,命令是flush tables with read lock(FTWRL)。当你需要将整个库处于只读状态(不能写入)的时候,可以使用这个命令,之后线程的以下语句就会被阻塞:数据更新语句(数据的增删改),数据定义语句原创 2021-05-23 17:53:52 · 324 阅读 · 1 评论 -
mysql 可重复读的实现原理
简述MySQL默认的事务隔离级别是可重复读,即:事务A在读到一条数据之后,此时事务B对该数据进行了修改操作并提交,那么事务A再读该数据,依然还是原来的内容。 额,MySQL可重复读是如何做到的?其实使用的是一种叫MVCC的控制方式 ,即Mutil-Version Concurrency Control(多版本并发控制),类似于乐观锁的一种实现方式。实现细节InnoDB在每行记录后面保存两个隐藏的列,分别保存了这个行的创建时间(版本号)和行的删除时间(版本号)。这里存储的并不是实际的时间值,而原创 2021-05-23 17:46:30 · 3871 阅读 · 1 评论 -
mysql 主从同步
什么是mysql主从复制?MySQL主从复制的意思就是将数据从一个MySQL服务器的主节点复制到N个从节点(一个或多个)。一般,主节点负责写数据,从节点负责读数据,同时保证主节点的数据及时同步到从节点。主从复制可以做到实时热备数据热备和冷备?热备:在数据库运行的情况下,备份数据。冷备:在数据库关闭的情况下,备份数据。Mysql的复制模式?异步复制是MySQL默认的复制模式。该模式的好处是不用一直访问master,从而对master造成压力。该模式的坏处是主库写入binlog日原创 2021-05-23 17:40:53 · 137 阅读 · 1 评论 -
mysql 基础(持续更新)
1.where条件转移sum(if(startTime>xxx and endTime>xxx,money,0)): 满足条件的部分进行求和count(if(startTime>xxx and endTime>xxx,1,null)):满足条件的部分进行计数sum(if(startTime>xxx and endTime>xxx,CASE WHEN ... THEN ...,0)): 满足条件的部分进行分类求和2.json_extract()获取json数原创 2021-05-23 17:39:25 · 73 阅读 · 0 评论 -
mysql 存储过程之游标的使用
#如果存在此存储过程,则删除drop PROCEDURE if EXISTS dg;#创建存储过程create PROCEDURE dg(in c_id int,in c_xz int,in c_cq int)begin#声明变量DECLARE finish int DEFAULT 0; #数据遍历结束标志DECLARE var_id int;DECLARE var_date varchar(15);DECLARE var_to_work_time varchar(10);DECLARE原创 2021-05-14 21:03:25 · 1549 阅读 · 0 评论 -
mybatis 生成器 数据库tinyint类型自动生成为boolean类型
在jdbc连接参数上加上以下内容?tinyInt1isBit=false原创 2021-01-23 21:15:04 · 516 阅读 · 0 评论 -
mysql group_concat函数
mysql-关键字书写顺序select -> from -> where -> group by -> having -> order by -> limitmysql-分组连接函数https://baijiahao.baidu.com/s?id=1595349117525189591&wfr=spider&for=pc原创 2021-01-14 21:25:50 · 101 阅读 · 0 评论 -
mongo 数据导入导出
mongo 数据导入导出1.备份式导出全库数据(导出的数据库目录为xxx)mongodump -h ip:port -u username -p "passward" --authenticationDatabase admin -o E:\mongo-data-export2.导入集合数据到另一个库mongoimport --host 127.0.0.1 --port 27017 --db xxx --collection sys_dictionary E:\mongo-data-expor..原创 2020-12-13 19:43:44 · 185 阅读 · 0 评论 -
mysql 判断两个字符串是否存在交集
函数的方式(这个暂时不介绍) sql的方式(正则)select concat(str1, ',') regexp concat(replace(str2,',',',|'),',');这个表达式,匹配时看似可以满足需求,实际会存在短匹配情况。比如对“3333,44”这样的字符串进行匹配,如果想要匹配"3333"或者"44"或者"3333,44"这三种字符串,可以使用|限定符(表示或者的意思),同时加以逗号进行精准匹配,似乎以满足需求,其实不然,还差一步。此时匹配的长度可能不是最长的,而最长匹配才原创 2020-10-31 10:47:26 · 3252 阅读 · 0 评论 -
mysq-全表累加统计&&分组累加统计
mysql-全表累加统计实现思路1)定义用户变量,设定初始值2)累加赋值,所求值作为显示列SELECTcreate_time,total_num,@total_num := 0,@total_num := @total_num + stn AS stnFROM (SELECTcreate_time,total_num,sum(total_num) stnFROM opm_merchant_coupon WHERE activity_id=4020000000220GROU原创 2020-10-01 12:55:17 · 1346 阅读 · 0 评论 -
com.alibaba.druid.pool.DruidDataSource : testWhileIdle is true, validationQuery not set
properties形式的相关配置#申请连接时执行validationQuery检测连接是否有效,做了这个配置会降低性能。default=truespring.datasource.druid.test-on-borrow=false#建议配置为true,不影响性能,并且保证安全性。申请连接的时候检测,如果空闲时间大于timeBetweenEvictionRunsMillis,执行validationQuery检测连接是否有效。default=falsespring.datasource.dr.原创 2020-07-30 12:17:25 · 11057 阅读 · 0 评论