数据库
文章平均质量分 61
Crystalqy
这个作者很懒,什么都没留下…
展开
-
详谈 MySQL Online DDL
作为一名DBA,对数据库进行DDL操作非常多,如添加索引,添加字段等等。对于MySQL数据库,DDL支持的并不是很好,一不留心就导致了全表被锁,经常搞得刚入门小伙伴很郁闷又无辜,不是说MySQL支持Online DDL么,不是说不会锁表的么?是的,令人高兴的是从MySQL5.6开始就支持部分DDL Online操作了,但并不是全部喔,今天这里就对我们常用的DDL进行总结和说明,让操作DDL的小伙伴从此做到心中有数,得心应手,让老板们再也不用担心我们做DDL咯。我自己遵守的一条黄金准则:DDL永远不要在业转载 2021-08-24 10:47:06 · 578 阅读 · 0 评论 -
Mysql online DDL 线上无锁添加索引
只能通过ALTER TABLE不能create indexALTER TABLE tbl_name ADD PRIMARY KEY (column), ALGORITHM=INPLACE, LOCK=NONE;参数说明:ALGORITHM=INPLACE更优秀的解决方案,在当前表加索引,步骤:1.创建索引(二级索引)数据字典2.加共享表锁,禁止DML,允许查询3.读取聚簇索引,构造新的索引项,排序并插入新索引4.等待打开当前表的所有只读事务提交5.创建索引结束ALGORIT原创 2021-08-24 10:39:54 · 5072 阅读 · 0 评论 -
MySQL TokuDB引擎安装详解
背景: TokuDB引擎是有Tokutek开发的一个数据库存储引擎,在设计之初便引入了独特的索引算法,在其官网测试的文章中看到TokuDB性能比InnoDB高出很多。MySQL是一个插件式的数据库,在MySQL5.5版本之前MyISAM是MySQL的默认存储引擎,在之后的版本中默认的存储引擎变成了InnoDB。其特点是它支持事务,具有完善的崩溃恢复机制,具体的特点这里不说明,可以自行的寻找资料。这里介绍的TokuDB和InnoDB有很多相似之处:一个高性能,支持事务、MVCC、...原创 2021-04-09 15:24:28 · 26910 阅读 · 1 评论 -
MySql的sql语句执行顺序
MySql的sql语句执行顺序FROMtable1 left join table2 on 将table1和table2中的数据产生笛卡尔积,生成Temp1 JOINtable2 所以先是确定表,再确定关联条件 ONtable1.column = table2.columu 确定表的绑定条件 由Temp1产生中间表Temp2 WHERE对中间表Temp2产生的结果进行过滤 产生中间表Temp3 GROUP BY对中间表Temp3进行分组,产生中间表Temp4 HAVING对分组后的...原创 2021-02-25 16:58:48 · 25990 阅读 · 0 评论 -
mysql中空值和null值的区别及处理方法总结
一直对空值和null值的概念理解不清晰,所以结合资料以及自己的理解对他们的区别和处理方式进行总结。首先就是在概念上的不同:1、空值不占空间2、null值占空间。打个比喻就是空值表示一个杯子是真空状态,什么都没有,而null值是杯子中有空气。接下就建立一个测试表比较它们之间的区别:发现报错,colA的值不能是null值。再插入一条数据,这个时候发现向colB一列插入null成功。再插入二列数据发现向colA一列插入空值成功,而colB列既可以插入空值,也可以插入转载 2021-02-25 16:09:31 · 1295 阅读 · 0 评论 -
Mysql GROUP BY 排除null数据
在使用group by某列名进行分组统计时,该列名的数据有些为 null, 因而会出现 null 的数据行全部分成一组导致数据错误,所以 null 列名的数据行不能执行group by直接执行查询得到的结果为:使用group by进行查询得到的结果为:很明显,因为master_name有的列为空,所以导致分组的时候将master_name为空的全部合并到一组去了解决方案:IFNULL() 函数和 UUID() 函数网上有类似的解决方案,通过IFNULL()函数搭配UUID..原创 2021-02-25 15:46:26 · 27759 阅读 · 0 评论 -
MySQL查询整个库、指定库、指定表的存储使用大小
1:查询整个数据库,整个库的大小;单位转换为G:select concat(round(sum(DATA_LENGTH/1024/1024/1024),2),'G') as datafrom information_schema.TABLES;2:查询mysql数据库,某个库的大小:select concat(round(sum(DATA_LENGTH/1024/1024/1024),2),'G') as datafrom information_schema.TABLES...原创 2020-09-28 15:44:26 · 450 阅读 · 0 评论 -
Mysql中的 GROUP BY WITH ROLLUP用法
1.WITH ROLLUP:在group分组字段的基础上再进行统计数据。例子:首先在name字段上进行分组,然后在分组的基础上进行某些字段统计,表结构如下:CREATE TABLE `test` ( `Id` int(11) NOT NULL AUTO_INCREMENT, `title` varchar(25) DEFAULT NULL COMMENT '标题', `uid` int(11) DEFAULT NULL COMMENT 'uid', `money` decimal(原创 2020-09-25 10:41:02 · 1970 阅读 · 0 评论 -
MySQL 驱动表和被驱动表
先了解在join连接时哪个表是驱动表,哪个表是被驱动表:1.当使用left join时,左表是驱动表,右表是被驱动表2.当使用right join时,右表时驱动表,左表是驱动表3.当使用join时,mysql会选择数据量比较小的表作为驱动表,大表作为被驱动表join查询如何选择驱动表与被驱动表 在sql优化中,永远是以小表驱动大表。例如: A是小表,B是大表 使用left...转载 2019-10-24 20:12:46 · 1804 阅读 · 0 评论 -
MySQL存储过程双重循环
在工作中遇到了数据迁移,需要些存储过程对数据进行迁移,用到了双重循环BEGIN-- 定义变量DECLARE orderNo VARCHAR(500);DECLARE total INT;DECLARE payAmount decimal(11,2);DECLARE itemId INT;DECLARE itemNo VARCHAR(500);DECLARE x INT;...原创 2019-05-07 19:06:35 · 9012 阅读 · 0 评论 -
Spring Boot多数据源配置及No operations allowed after connection closed连接异常的解决
一个基于springcloud的微服务项目,详细配置: SpringCloud + SpringMVC+SpringData JPA+ MySql+Postgresql其中项目配置了多数据源,前期开发测试是没什么问题的,但是等到项目在服务器上面测试时,第二天就上午出现了数据库连接异常。经过查看日志发现下面这个异常:注意异常信息: No operations allowed after co...转载 2019-05-23 13:53:50 · 2014 阅读 · 0 评论 -
springboot 连接池wait_timeout超时设置
使用springboot 线程池连接MySQL时,mysql数据库wait_timeout 为8个小时,所以程序第二天发现报错,在url配置了 autoReconnect=true 也不行,查询配置以下#验证连接的有效性spring.datasource.test-while-idle=true#获取连接时候验证,会影响性能spring.datasource.test-on-bo...翻译 2019-05-23 13:55:21 · 6133 阅读 · 0 评论 -
mysql之show engine innodb status解读
注:以下内容为根据《高性能mysql第三版》和《mysql技术内幕innodb存储引擎》的innodb status部分的个人理解,如果有错误,还望指正!! innodb存储引擎在show engine innodb status(老版本对应的是show innodb status)输出中,显示除了大量的内部信息,它输出就是一个单独的字符串,没有行和列,内容分为很多小段,每一段对应in...转载 2019-05-29 11:35:54 · 333 阅读 · 0 评论 -
MySql select排序查询
基本语法:SELECT 查询列表FROM 表名WHERE 查询条件ORDER BY 排序列表(asc或desc)特点: 1.order by 子句可以支持单个字段、多个字段、表达式、函数、别名的查询 2.order by 一般位置查询语句的最后面(limit子句除外)举个栗子/**查询员工信息,要求工资按照从低到高进行排序(默认升序)**/SELECT * ...转载 2019-06-10 09:43:10 · 819 阅读 · 0 评论 -
mybatis 中 foreach collection的三种用法
foreach元素的属性主要有 item,index,collection,open,separator,close。item表示集合中每一个元素进行迭代时的别名,index指 定一个名字,用于表示在迭代过程中,每次迭代到的位置,open表示该语句以什么开始,separator表示在每次进行迭代之间以什么符号作为分隔 符,close表示以什么结束。在使用foreach的时候最关...转载 2019-06-10 10:38:18 · 293 阅读 · 0 评论 -
JDBC与mysql同为CST时区导致数据库时间和客户端时间差13或者14小时
摘要线上排查问题时候碰到一个奇怪的问题,代码中读取一天的记录。代码中设置时间是从零点到夜里二十四点。但是读取出来的记录的开始是既然是从13点开始的。然后看了JDBC的源码发现主要原因是Mysql的CST时间与Java中CST时间是不一样的,下面给出问题的排查过程。情景再现1、代码中用的java.util.Date类型、换成TimeStamp类型也没有解决问题2、数据库中用的Time...转载 2019-06-05 09:27:11 · 1510 阅读 · 0 评论 -
单表查询树形结构的SQL语句
今天在做一个项目模块的时候遇到了点问题,数据库设计是单表自身关联,就是增加一个字段保存父级ID实现树状数据结构,开始设计的时候没有考虑要怎么查询,今天做到着一步卡住了,不晓得怎么写SQL语句,当时还在想是不是没有这种案例,但是转念一想不肯能这么经典的案例都没有解决方案,然后google了一下晓得了:Start with...Connect By子句递归查询下面是从网上转载的内容:...原创 2019-06-22 15:59:25 · 6908 阅读 · 0 评论 -
哪些异常是RuntimeException?Sql异常属于RuntimeException吗?Spring下SQL异常事务回滚
一,为什么框架中根本没有对Exception的一般子类进行回滚配置,异常发生时,事务都进行了回滚 ,说好的只会对RuntimeException(Unchecked 非受检异常)回滚呢? 此时,我们就有必要了解一下,RuntimeException所包含的子类具体有哪些:这时,或许你就明白了 :平常代码运行阶段经常遇到的那些异常,其实都是RuntimeException...转载 2019-07-26 18:18:58 · 1413 阅读 · 0 评论 -
别再乱改数据库连接池的大小了!
目录 一、笔者前言 二、正菜开始 三、假设你的服务有1万并发的访问 四、为啥有这种效果? 五、其他应该考虑到的因素 六、连接数计算公式 七、结论:你需要的是一个小连接池,和一个等待连接的线程队列 八、额外需要注意的点 一、前言基本上来说,大部分项目都需要跟数据库做交互,那么,数据库连接池的大小设置成多大合适呢?...原创 2019-05-20 10:15:24 · 796 阅读 · 1 评论 -
MySQL中使用LIMIT进行分页的方法
一:分页需求:客户端通过传递start(页码),pageSize(每页显示的条数)两个参数去分页查询数据库表中的数据,那我们知道MySql数据库提供了分页的函数limit m,n,但是该函数的用法和我们的需求不一样,所以就需要我们根据实际情况去改写适合我们自己的分页语句,具体的分析如下:比如:查询第1条到第10条的数据的sql是:select * from table limit 0,...原创 2019-04-19 09:57:21 · 246 阅读 · 0 评论 -
Oracle对结果集排序
对结果集排序 **rank() over、dense_rank()、row_numbe**r() 的区别和用法rank() over: rank() over是查出指定条件后进行一个排名,但是有一个特点。假如是对学生排名,那么实用这个函数,成绩相同的两名是并列,例如下图1 2 2 4。 用法:select a1,a2,rank () over (order by a1) rank f原创 2018-02-01 17:04:20 · 941 阅读 · 0 评论 -
mysql 常用SQl
获取行号SELECT (@rowNum:=@rowNum+1) as rowNo ,T.* FROM oic_service_project T,(Select (@rowNum :=0) ) b where T.APPLY_ID = 1删除三个月之前的数据delete from table1 where date1<curdate() - interval 3 m...原创 2018-02-01 16:44:28 · 477 阅读 · 0 评论 -
Linux mysql导入导出命令
导出:mysqldump -u 用户名 -p 数据库 > 导出脚本.sql示例:mysqldump -u root -p oic > oic_bak_2017-2-23.sql用该命令可以将脚本导出到当前执行该命令的目录下导入:第一步:进入MySQL命令 mysql -u root -p第二步:创建数据库mysql>create database testDB; (注意,在MyS...原创 2018-02-01 16:51:00 · 284 阅读 · 0 评论 -
mysql 获取某个时间段每一天、每一个小时的统计数据
获取每一天的统计数据做项目的时候需要统对项目日志做分析,其中有一个需求是获取某个给定的时间段内,每一天的日志数据,比如说要获取从2018-02-02 09:18:36到2018-03-05 23:18:36这个时间段内,统计出每一天的日志数据,一般情况下,看到这种需求都是考虑使用函数来搞定,直接上sql语句SELECT DATE_FORMAT(trigger_time, '%Y-...原创 2018-03-05 11:08:29 · 41698 阅读 · 6 评论 -
mybatis学习之路----动态sql之if条件判断各种使用方式
点滴记载,点滴进步,愿自己更上一层楼。由于需要看到效果,所以这节最好可以将sql语句打印出来。参考 mybatis学习之路----打印sql语句mybatis的if判断语句其实跟el表达式的if条件判断有些类似。例如: <if test="id != null"> </if>1 如果参数为数字类型的时候没有特俗需求的情况只需要判断是否为null即可。例如:<if te...转载 2018-03-05 11:24:04 · 2962 阅读 · 0 评论 -
MyBatis组件的生命周期
SQLSessionFactoryBuilderSQLSessionFactoryBuilder是利用XML或者Java编码获得资源来构建SqlSessionFactory的,通过它可以构建多个SessionFactory。它的作用就是一个构建器,一旦构建了SqlSessionFactory,它的作用就已经完结,失去了存在的意义,这时我们就应该毫不犹豫的废弃它,将它回收。所以它的生命周期只存在于方...转载 2018-03-22 14:04:32 · 267 阅读 · 0 评论 -
MySQL索引背后的数据结构及算法原理
数据结构及算法基础索引的本质MySQL官方对索引的定义为:索引(Index)是帮助MySQL高效获取数据的数据结构。提取句子主干,就可以得到索引的本质:索引是一种数据结构。数据库查询是数据库的主要功能之一,最基本的查询算法是顺序查找(linear search)时间复杂度为O(n),显然在数据量很大时效率很低。优化的查找算法如二分查找(binary search)、二叉树查找(binary tre...转载 2018-03-27 17:28:07 · 161 阅读 · 0 评论 -
Redis 集群
Redis集群介绍Redis 集群是一个提供在多个Redis间节点间共享数据的程序集。Redis集群并不支持处理多个keys的命令,因为这需要在不同的节点间移动数据,从而达不到像Redis那样的性能,在高负载的情况下可能会导致不可预料的错误.Redis 集群通过分区来提供一定程度的可用性,在实际环境中当某个节点宕机或者不可达的情况下继续处理命令. Redis 集群的优势:自动分割数据到不同的节点上...转载 2018-04-10 10:26:57 · 150 阅读 · 0 评论 -
MySQL 索引及优化实战
索引概念和作用索引是一种使记录有序化的技术,它可以指定按某列/某几列预先排序,从而大大提高查询速度(类似于汉语词典中按照拼音或者笔画查找)。索引的主要作用是加快数据查找速度,提高数据库的性能。MySQL 索引类型从物理存储角度上,索引可以分为聚集索引和非聚集索引。1. 聚集索引(Clustered Index)聚集索引决定数据在磁盘上的物理排序,一个表只能有一个聚集索引。2. 非聚集索引(Non-...转载 2018-03-27 20:00:16 · 237 阅读 · 0 评论 -
mybatis返回map类型数据空值字段不显示
Spring boot 整合mybatis查询数据,返回resultType=”map”时,如果数据为空的字段,则该字段省略不显示,可以通过添加配置文件,规定查询数据为空是则返回null。在MybatisAutoConfiguration配置文件中,设置mybatis的Configuration属性,将callSettersOnNulls设置为trueConfiguration cf = crea...原创 2018-05-10 11:02:35 · 1621 阅读 · 0 评论 -
乐观锁和悲观锁
乐观锁每次获取数据的时候,都不会担心数据被修改,所以每次获取数据的时候都不会进行加锁,但是在更新数据的时候需要判断该数据是否被别人修改过。如果数据被其他线程修改,则不进行数据更新,如果数据没有被其他线程修改,则进行数据更新。由于数据没有进行加锁,期间该数据可以被其他线程进行读写操作。一般使用version方式和CAS操作方式。 Version方式: 一般是在数据表中加...原创 2018-11-02 19:55:17 · 933 阅读 · 0 评论 -
mysql数据库如何进行优化
1.对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引 。2.应尽量避免在 where 子句中使用!=或<>操作符,否则引擎将放弃使用索引而进行全表扫描。3.应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索引而进行全表扫描,如: select id from t where num i...转载 2018-11-30 10:53:30 · 478 阅读 · 0 评论 -
mysql的left join、right join、inner join、union等连接查询
TABLE A ;TABLE B内连接:内连接:A INNER JOIN B ,在A中也有,在B中也有的数据才能查询出来外连接:左(外)连接:A LEFT (OUTER) JOIN B,连接查询的数据为符合条件的左表A的所有行,而不仅仅是A、B表联接列所匹配的行。如果左表A的某行在右表B中没有匹配行,则在相关联的结果集行中右表B的所有选择列表列均为空值(NULL)。 右(外)连...转载 2019-01-10 19:27:33 · 559 阅读 · 0 评论 -
MngoDb MongoClientOptions 常用配置信息
MongoClientOptions.Builder addClusterListener(ClusterListener clusterListener)Adds the given cluster listener.//添加给定的集群监听器MongoClientOptions.Builder addCommandListener(CommandListener commandListene...翻译 2019-01-07 16:27:14 · 1155 阅读 · 0 评论 -
MySQL 手动设置自动递增为某一值
最近遇到使用 MySQL 时发现自动递增的键会因为中途删除了某个数据而变得不连续,就设想能不能把这个键重新从1开始自动递增? 第一种:如果表中原来的数据不需要保留TRUNCATE TABLE table_name;第二种:如果表中数据需要保留ALTER TABLE table_name AUTO_INCREMENT = X;第三种:如果恰好在创建表时需要设置自增字段...原创 2019-01-09 19:11:01 · 5475 阅读 · 1 评论 -
关于Mybatis的@Param注解
@Param Parameter N/A 如果你的映射器的方法需要多个参数, 这个注解可以被应用于映射器的方法 参数来给每个参数一个名字。否则,多 参数将会以它们的顺序位置来被命名 (不包括任何 RowBounds 参数) 比如。 #{param1} , #{param2} 等 , 这 是 默 认 的 。 使 用 @Param(“person”),参数应该被命名为 #{person}。转载 2019-04-11 21:29:27 · 711 阅读 · 0 评论 -
MYSQL性能优化的最佳20+条经验
今天,数据库的操作越来越成为整个应用的性能瓶颈了,这点对于Web应用尤其明显。关于数据库的性能,这并不只是DBA才需要担心的事,而这更是我们程序员需要去关注的事情。当我们去设计数据库表结构,对操作数据库时(尤其是查表时的SQL语句),我们都需要注意数据操作的性能。这里,我们不会讲过多的SQL语句的优化,而只是针对MySQL这一Web应用最多的数据库。希望下面的这些优化技巧对你有用。1. 为查询...转载 2019-04-15 13:45:46 · 143 阅读 · 0 评论 -
ORACLE常用操作
查询数据库当前进程的连接数:select count(*) from v$process;查看数据库当前会话的连接数:select count(*) from v$session;查看数据库的并发连接数:select count(*) from v$session where status='ACTIVE';查看当前数据库建立的会话情况:select s...原创 2018-02-01 16:58:28 · 580 阅读 · 0 评论