2021
01-21
01-21
Go基于GORM 获取当前请求所执行的 SQL 信息(思路详解)
前言为了便于精准排查问题,需要将当前的请求信息与当前执行的SQL信息设置对应关系记录下来,记录的SQL信息包括:执行SQL的当前时间;执行SQL的文件地址和行号;执行SQL的花费时长;执行SQL的影响行数;执行的SQL语句;数据库组件使用的是GORM。思路1、在执行SQL前,设置开始执行时间(计算执行时长会用到);2、在执行SQL后,第一,获取当前请求的上下文,为什么获取上下文,因为需要从上下文中获取...
继续阅读 >
在SQLServer中,数据类型datetimeoffset转换为datetime类型或datetime2类型时需要特别注意,有可能一不小心你可能会碰到下面这种情况。下面我们构造一个简单案例,模拟一下你们可能遇到的情况。CREATETABLETEST(IDINTIDENTITY(1,1),CREATE_TIMEDATETIME,CONSTRAINTPK_TESTPRIMARYKEY(ID));GOINSERTINTOTEST(CREATE_TIME)SELECT'2020-10-0311:10:36'UNIONALLSELECT'2020-10-0311:11:36'UNION...
原始数据和目标数据实现SQL语句(最大)selectshop,month,greatest(dz,fz,sp)asmaxfromtablename;实现SQL语句(最小)selectshop,month,least(dz,fz,sp)asminfromtablename;补充:SQLServer获取一行中多列的最大值三种方法有些时候我们需要从一个表的多个列中获取一个最大值(这些列的数据类型相同,并且是每一行记录都要获取一个最大值)。下面讲了三种方法,我们一起看下。首先我们创建一个表,并在表中插入需要用到的记录,如...
在SQLServer中,如果我想授予一个用户klb拥有创建表的权限,但是我又不想授予其数据库角色db_ddladmin,因为这样会扩大其权限,那么授予下面权限可行吗?如下所示:USEAdventureWorks2014;GOGRANTCREATETABLETOklb;那么这样授权是否就OK呢?答案是这样授权会报错“Thespecifiedschemaname"dbo"eitherdoesnotexistoryoudonothavepermissiontouseit.”需要授予下面权限,登录名klb才能真正的创建表。USEAdve...
一、SqlServer插入方案介绍关于SqlServer批量插入的方式,有三种比较常用的插入方式,Insert、BatchInsert、SqlBulkCopy,下面我们对比以下三种方案的速度1.普通的Insert插入方法publicstaticvoidInsert(IEnumerable<Person>persons){using(varcon=newSqlConnection("Server=.;Database=DemoDataBase;UserID=sa;Password=8888;")){con.Open();foreach(varpersoninpersons){using(varcom=...
折腾了差不多两个小时,各种方法尝试,后来想想应该是where过滤后的数据量没有达到默认一页规定的数量所以干脆where就不显示limit信息了,试了一下还真是。。。这作者还真是把程序做的足够智能,可是这个智能也让我白白花掉了两个小时。。。还是自己太笨了……但是奇怪的是,如果我不设置QueryWrapper参数,where后面的分页限制又是可以出来的。百思不得其解作者的想法。。。具体看代码:@OverridepublicPageUtilsqueryPage(Map...
1分组聚合的原因SQL中分组函数和聚合函数之前的文章已经介绍过,单说这两个函数有可能比较好理解,分组函数就是groupby,聚合函数就是COUNT、MAX、MIN、AVG、SUM。拿上图中的数据进行解释,假设按照product_type这个字段进行分组,分组之后结果如下图。SELECTproduct_typefromproductgroupbyproduct_type从图中可以看出被分为了三组,分别为厨房用具、衣服和办公用品,就相当于对product_type这个字段进行了去重,确实group...
背景:1.在数据库中有一个通知表可以看到其中的gmt_create、notifier_name、outer_title这三个字段是有下划线的2.这张表对应的实体类为publicclassNotification{privateLongid;privateLongnotifier;privateLongreceiver;privateLongouterId;privateIntegertype;privateLonggmtCreate;privateIntegerstatus;privateStringnotifierName;privateStringouterTitle;}在写实际java代码命...
最近学习SSM项目开发,用到oracle数据库,使用管理软件PL/sqldeveloper往数据库表中插入数据时记录乱码。结果如下:可以看到中文数据都乱码成了???????问号,看了网上各位大佬的解决办法,说是由于oracle服务器端字符编码和Oracle客户端字符编码不一致引起的。(但是我的oracle服务器端和Oracle客户端字符编码是一样的,这就很纳闷了,但同样用了以下解决办法,搞定!!!)第一步:登录PL/sqldeveloper,检查Oracl...
SQL实现表里数据按一定顺序排序后,按某几个字段分组后相邻两行数据实现加减乘除运算。思路:1:先把表数据分组排序后打上序号标签2:根据需求把标签字段加/减一上代码:selectdistincta.phone,from_unixtime(cast(floor(a.ts/1000)asbigint),'yyyyMMddHH:mm:ss'),chafromtableajoin(selecta.phone,a.ts,abs(a.ts-b.ts)/1000chafrom(selectphone,ts,row_number()over(partitionbyphoneorderbyts)rankfromt...
概述源码就是能够被用来执行,生成机器能够识别的代码,通过开源源码,可以引用其功能。重要性1、mybatis中的sql执行,不仅要知道返回的结果是什么,还需要知道这结果是怎么来的,经过了怎样的处理,只有知道了这样的原理,碰到问题才能更好的知道问题出在那个环节。2、能更好的扩展应用程序,可以做到代码的复用,减少开发成本和时间。3、学习其中的设计思想能够在其他应用得已应用。步骤源码阅读,可以从测试用例着手,每个源码,...
两个不同的表进行查询,需要把结果合并,比如table1的列为id,user_id,type_id,pro_id;table2的列为id,user_id,collect_id;分别如下图所示table1:table2:将两个表的查询结果合并到一起的查询语句为select*,nullascollect_idfromtable1whereuser_id=527unionselectid,user_id,nullastype_id,nullaspro_id,collect_idfromtable2whereuser_id=527;结果为:其实就是把对应的列补充到没有该列的表中,在例...