DataBase
文章平均质量分 73
JFS_Study
IP属地以运营商信息为准,境内显示到省(区、市),境外显示到国家(地区)
展开
-
MySQL和Oracle语法
MySQL和Oracle语法原创 2021-07-16 15:21:42 · 1394 阅读 · 0 评论 -
如何解决海量数据的处理问题
一、海量数据,为高效查询,如何处理?分库分表会带来哪些副作用?可能的解决方式有哪些?目前经常使用的关系型数据库如 MySQL、SQL Server 等,都是以“行”为单位进行存储,为了快速检索,也都采用了B树或其他索引技术。1️⃣从原理上来讲,表中的数据越多,索引树的范围越大,磁盘读取也越多,性能也就越低。2️⃣从实践角度来看,一般以百万到千万作为一个表的存储量级,超出该范围之后,性能就会下降,需要采用其他技术手段解决。【读写分离】首先想到的就是能否将读和写分离,主数据库用于写入,读数据库(多个)原创 2022-01-14 10:45:11 · 4225 阅读 · 0 评论 -
MyBatis 批量插入数据实现(MySQL)
假如需要搬一万块砖到楼顶,有一部电梯,电梯一次可以放适量的砖(最多放 500)。可以选择一次运送一块砖,也可以一次运送 500 块砖,哪个时间消耗大?一、sql 层面实现数据插入单条插入数据的写法:insert into table ([列名],[列名]) values ([列值],[列值]));或:insert into table values ([列值],[列值]));批量插入一种可以在代码中循环执行上面的语句,但是这种效率太差。另一种,可以用MySQL支持的批量插入语句,这种原创 2022-03-28 10:07:14 · 3282 阅读 · 0 评论 -
MySQL 服务端和客户端交互过程
一、几个单词简写SQL:Structured Query Language结构化查询语言(数据以查询为主)SQL分为三个部分:DDL: Data Definition Language数据定义语言。用来维护存储数据的结构(数据库,表),代表指令:create、drop和alter等。DML:Data Manipulation Language数据操作语言。用来对数据的操作(数据表中内容),代表指令:insert、delete 和 update 等。其中 DML 内部又单独进行了一个分类:DQL(D原创 2022-03-28 10:00:42 · 508 阅读 · 0 评论 -
ibatis 中的 isNotNull、isNull、isNotEmpty、isEmpty
一、区别isNotNull:表示参数不为 NULL,返回 TRUE 反之则为 FALSEisNull:表示参数为 NULL,返回 TRUE 反之则为 FALSEisNotEmpty:表示参数不为 NULL 也不为空,返回 TRUE 反之则返回 FALSEisEmpty:表示参数为 NULL 或着为空,返回 TRUE 反之则为 FALSE二、对比当 xml 中用 isNotEmpty 配置时<select id="queryTable" resultClass="int" parame原创 2022-03-25 15:30:32 · 4901 阅读 · 0 评论 -
Mybatis 的连带操作(注解方式)
Mybatis 的连带操作(注解方式)原创 2022-03-16 13:53:52 · 1708 阅读 · 0 评论 -
MyBatis 的一对一,多对多
一、概述MyBatis 中的一对多、多对一和多对多,主要就是 resultMap 中:association:一个复杂的类型关联。许多结果将包成这种类型(一对多)collection:复杂类型的集合(多对一)这2个属性的使用,而一对多和多对一都是相互的,只是站的角度不同。实例:这个实例只说这2个属性的使用方法。首先是数据库,以员工管理系统的数据库为例。实体类:这里只列要实现映射功能用到的类 user、role、department。department 和 user,是一对多关原创 2022-03-16 13:52:07 · 5575 阅读 · 0 评论 -
SQL那个面试题(学生表_课程表_成绩表_教师表)
1. 查询“001”课程比“002”课程成绩高的所有学生的学号;2. 查询课程编号“002”的成绩比课程编号“001”课程低的所有同学的学号、姓名;3. 查询平均成绩大于60分的同学的学号和平均成绩;4. 查询所有同学的学号、姓名、选课数、总成绩;5. 查询姓“李”的老师的个数;6. 查询没学过“叶平”老师课的同学的学号、姓名;7. 查询学过“001”并且也学过编号“002”课程的同学的学号、姓名;8. 查询学过“叶平”老师所教的所有课的同学的学号、姓名;9. 查询所有课程成绩.原创 2022-03-16 13:47:39 · 2879 阅读 · 0 评论 -
MySQL 行转列与列转行
一、行转列数据准备建表:CREATE TABLE `student` ( `ID` int(10) NOT NULL AUTO_INCREMENT, `USER_NAME` varchar(20) DEFAULT NULL, `COURSE` varchar(20) DEFAULT NULL, `SCORE` float DEFAULT '0', PRIMARY KEY (`ID`)) ENGINE=InnoDB AUTO_INCREMENT=10 DEFAULT CHARSET原创 2022-03-16 11:15:31 · 1094 阅读 · 0 评论 -
物理:redo log(重做日志) 和 逻辑:binlog(归档日志)
一、简述一条查询语句的执行过程一般是经过连接器、分析器、优化器、执行器等功能模块,最后到达存储引擎。一条更新语句的执行流程又是怎样的呢?MySQL可以恢复到某个时间段内任意一秒的状态,这是怎样做到的呢?从一个表的一条更新语句说起,下面是这个表的创建语句,这个表有一个主键 ID 和一个整型字段 c:mysql> create table T(ID int primary key, c int);如果要将 ID=2 这一行的值加 1,SQL 就会这么写:mysql> update T原创 2022-03-16 11:13:44 · 469 阅读 · 0 评论 -
MySQL 的 limit 分页查询及性能问题
MySQL 通过 limit 实现分页查询。limit 接收一个或两个整数型参数。如果是两个参数,第一个指定返回记录行的偏移量,第二个指定返回记录行的最大数目。初始记录行的偏移量是 0。为了与 PostgreSQL 兼容,limit 也支持limit a offset b【a:取的记录数;b:索引】。一、分页查询客户端通过传递 start(页码),**pageSize(每页显示的条数)**两个参数去分页查询数据库表中的数据。MySql 数据库提供的分页函数 limit m,n 用法和实际需求不切合,所以原创 2022-03-16 11:08:03 · 11211 阅读 · 2 评论 -
MySQL事务锁问题-Lock wait timeout exceeded
一、问题现象接口响应时间超长,耗时几十秒才返回错误提示,后台日志中出现Lock wait timeout exceeded; try restarting transaction的错误。二、问题场景在同一事务内先后对同一条数据进行插入和更新操作;多台服务器操作同一数据库;瞬时出现高并发现象;三、问题原因在高并发的情况下,Spring事务造成数据库死锁,后续操作超时抛出异常。MySQL数据库采用InnoDB模式,默认参数innodb_lock_wait_timeout设置锁等待的时间是5原创 2022-03-16 11:04:28 · 2535 阅读 · 0 评论 -
查看用户锁表和对表解锁的 sql 语句
一、Oracle查看用户锁表select sess.sid, sess.serial#, lo.oracle_username, lo.os_user_name, ao.object_name, lo.locked_mode from v$locked_object lo, dba_objects ao, v$session sess where ao.object_id = lo.object_id and lo.session_id = ses原创 2022-03-16 11:03:42 · 2224 阅读 · 0 评论 -
MySQL 中 “:=” 和 “=” 的区别
一、说明=只有在 set 和 update 时才和:=一样,赋值的作用,其它都是等于的作用。鉴于此,用变量实现行号时,必须用:=。:=不只在 set 和 update 时赋值的作用,在 select 也是赋值的作用。二、:=和=在 select 时作用对比示例一set @num=0;select @num:= @num+1 as rowno, nc as nickname from table_user;示例二set @num=0;select @num= @num+1 a原创 2022-03-16 10:55:48 · 979 阅读 · 0 评论 -
Oracle 中的一些函数
一、比较大小函数 sign(n)函数说明:取数字 n 的符号,大于 0 返回 1;小于 0 返回 -1;等于 0 返回 0。示例:1、select sign( 2 ),sign(- 2 ),sign( 0 ) from dual;SIGN(2) SIGN(-2) SIGN(0) ———- ———- ———- 1 -1 02、a=100 b=200 则 sign(a-b) 返回 -1二、nv原创 2021-07-16 15:47:04 · 5899 阅读 · 0 评论 -
MySQL 查询树表某个根节点的子树
select * from dept where find_in_set(id,getDeptChildList(1))getDeptChildList 是函数,内容如下(navicat):参数:rootId VARCHAR(1000)BEGINDECLARE sChildList mediumtext;DECLARE sChildTemp mediumtext;SET sChildTemp =CAST(rootId AS CHAR);WHILE sChildTemp IS NOT NULL原创 2022-03-11 11:30:14 · 335 阅读 · 0 评论 -
MySQL 中函数列举
一、ifNull(expr1,expr2)ifNull(expr1,expr2)类似于 Oracle 中的 NVL 函数。含义是:如果第一个参数不为空,则返回第一个参数,否则返回第二个参数。二、if(expr1,expr2,expr3)if(expr1,expr2,expr3)类似于 Oracle 中的 NVL2 函数。含义是:如果第一个表达式的值为 true(不为 0 或不为 null),则返回第二个参数的值,否则返回第三个参数的值。三、dateDiff函数(begin减去end)dateDif原创 2022-03-11 11:28:59 · 577 阅读 · 0 评论 -
Mybatis
一、JDBC弊端重复创建链接和释放链接,造成资源浪费。解决方式:使用连接池出现硬编码,体现在数据库驱动,url、用户名密码、sql。解决方式:使用配置文件结果获取不方便。解决方式:把结果放到一个POJO中二、Mybatis 介绍MyBatis 本是apache的一个开源项目iBatis,2010年这个项目由apache software foundation 迁移到了google code,并且改名为MyBatis 。2013年11月迁移到Github。iBATIS一词来源于“internet原创 2022-03-11 11:20:51 · 895 阅读 · 0 评论 -
数据库连接池
一、关于数据库连接池一个普通的 java 程序,要查询数据库的数据,基本流程是这样的:可以看到,进行一次查询,要进行很多次网络交互,这样的缺点是:网络IO多;响应时间长,导致QPS降低;频繁创建连接和关闭连接,浪费数据库资源,影响服务器性能。什么是数据库连接池?顾名思义,就是一个池子,里面放着数据库连接,应用服务需要的时候就去池子里面拿,用完之后归还给池子。数据库连接池负责分配、管理、释放数据库连接,它允许应用服务重复使用数据库连接,而非重新建立。使用连接池之后,流程是这样的:数据原创 2022-03-11 11:19:56 · 12960 阅读 · 0 评论 -
MySQL 的锁应用实例
一、问题create table `mchopin` ( `id` bigint unsigned not null auto_increment comment '主键', `code` varchar(64) not null comment '用户CODE', `name` varchar(25) not null comment '姓名', `age` int not null comment '年龄', primary key (id), UNIQUE KEY `idx_c原创 2022-03-11 11:08:59 · 213 阅读 · 0 评论 -
Oracle 的 start with ... connect by prior ...
一、简述注解@Order或者接口Ordered的作用是定义Spring IOC容器中Bean的执行顺序的优先级,而不是定义Bean的加载顺序,Bean的加载顺序不受@Order或Ordered接口的影响。值越小拥有越高的优先级,可为负数。例如:@Order(-1)优先于@Order(0)@Order(1)优先于@Order(2)1️⃣@Order的注解源码解读@Retention(RetentionPolicy.RUNTIME)@Target({ElementType.TYPE, Elemen原创 2021-07-05 09:28:15 · 996 阅读 · 0 评论 -
SQL 注入攻击的防范
一、SQL 注入简介SQL 注入是比较常见的网络攻击方式之一,它不是利用操作系统的 BUG 来实现攻击,而是针对程序员编程时的疏忽,通过 SQL 语句,实现无帐号登录,甚至篡改数据库。二、SQL 注入攻击的总体思路寻找到 SQL 注入的位置判断服务器类型和后台数据库类型针对不通的服务器和数据库特点进行 SQL 注入攻击三、SQL 注入攻击实例比如在一个登录界面,要求输入用户名和密码:可以这样输入实现免帐号登录:用户名: ‘or 1 = 1 ––密 码:点击登录,如果没有做特殊处理,原创 2022-03-03 13:35:56 · 1020 阅读 · 0 评论 -
游标与视图
一、游标游标是对查询出来的结果集作为一个单元来有效的处理。游标可以定在该单元中的特定行,从结果集的当前行检索一行或多行。可以对结果集当前行做修改。一般不使用游标,但是需要逐条处理数据的时候,游标显得十分重要。游标的理解:可以把游标当成一个指针,它总是指向某一行来对其进行操作。游标的特点:游标是针对某一行操作的。游标需要占用很多资源。游标的作用:游标可以定位到记录集中特定的行上并进行操作。游标的使用:如图:图中有四个步骤:声明、打开、提取数据和关闭或释放游标。关于提取数据我们可以定义不同的方原创 2022-03-02 09:29:52 · 823 阅读 · 0 评论 -
HTML 字符实体 <(<;)、>(>;)等
一、概述在 HTML 中,某些字符是预留的。 在 HTML 中不能使用小于号(<)和大于号(>),这是因为浏览器会误认为它们是标签。 如果希望正确地显示预留字符,我们必须在 HTML 源代码中使用字符实体(character entities)。字符实体类似如下:&entity_name;或者&#entity_number;如需显示小于号,我们必须这样写:< 或 <注意:使用实体名而不是数字的好处是,名称易于记忆。不过坏处是,浏览器原创 2022-03-02 09:27:56 · 8712 阅读 · 3 评论 -
SQL 执行得很慢的原因
这个问题涉及到 MySQL 很多核心知识,如同测验计算机网络知识时,问“输入 URL 回车之后,究竟发生了什么”一样,就看能说出多少了。一、执行很慢,分两种情况大多数情况是正常的,只是偶尔出现很慢的情况。在数据量不变的情况下,这条 SQL 一直以来都执行的很慢。二、偶尔很慢的情况一条 SQL 偶尔出现很慢的情况,该 SQL 的书写本身问题不大,而是其他原因造成的,那会是什么原因呢?1️⃣数据库在刷新脏页当在数据库中插入或者更新一条数据的时候,数据库会在内存中把对应字段的数据更新了。更新之后原创 2022-03-02 09:24:34 · 5638 阅读 · 1 评论 -
MySQL 中的【ZEROFILL零填充】
在列中使用 zerofill,如果该列数据类型为 int(4),插入 1,显示 0001;如果插入 55555,显示也是 55555;插入负数显示为0000。因为MySQL自动增加UNSIGNED属性 UNSIGNED不能为负数,当插入负数时就显示0。#注意:column 紧跟两个agealter table mchopin change column age age int(11) unsigned zerofill;...原创 2022-03-02 09:07:48 · 3183 阅读 · 0 评论 -
索引(Index)
SQL语句优化MySQL大表优化一、什么是索引?索引是帮助 MySQL 高效获取数据的数据结构。在关系数据库中,索引是一种单独的、物理的对数据库表中一列或多列的值进行排序的一种存储结构,它是某个表中一列或若干列值的集合和相应的指向表中物理标识这些值的数据页的逻辑指针清单。索引的作用相当于图书的目录,可以根据目录中的页码快速找到所需的内容。索引提供指向存储在表的指定列中的数据值的指针,然后根据指定的排序顺序对这些指针排序。数据库使用索引以找到特定值,然后顺指针找到包含该值的行。这样可以使对应于表的原创 2022-03-01 11:06:48 · 5538 阅读 · 0 评论 -
MySQL 正负数排序
一、数据准备建表如下:CREATE TABLE `tab` ( `id` int(11) NOT NULL AUTO_INCREMENT, `num` varchar(3) DEFAULT NULL, PRIMARY KEY (`id`)) ENGINE=InnoDB AUTO_INCREMENT=13 DEFAULT CHARSET=latin1;新增数据:INSERT INTO `tab`(`id`, `num`) VALUES (1, '1');INSERT INTO `ta原创 2022-03-01 11:00:46 · 2295 阅读 · 0 评论 -
MySQL 慢查询
一、什么是慢查询慢查询,顾名思义,执行很慢的查询。有多慢?超过long_query_time参数设定的时间阈值(默认10s),就被认为是慢的,是需要优化的。慢查询被记录在慢查询日志里。慢查询日志默认是不开启的。如果需要优化SQL语句,就可以开启这个功能,它可以让你很容易地知道哪些语句是需要优化的。1️⃣show variables like 'slow_query_log';查询是否开启慢查询日志【开启慢查询sql:set global slow_query_log = 1/on;】【关闭慢查询sq原创 2022-03-01 10:58:25 · 12357 阅读 · 0 评论 -
sql 中的那些错误
一、【1136】Column count doesn’t match value count at row 1二、【1248】MySQL–Every derived table must have its own alias每个派生出来的表都必须有一个自己的别名一般在多表查询时,会出现此错误。因为,进行嵌套查询的时候子查询出来的结果是作为一个派生表来进行上一级的查询的,所以子查询的结果必须要有一个别名。三、【1292】Truncated incorrect DOUBLE value: ‘MCho原创 2022-03-01 10:57:16 · 186 阅读 · 0 评论 -
SQL 语句中的 1
一、select 1 from table; 与 select anycol(目的表集合中的任意一行) from tab; 与 select * from tab;从作用上来说是没有差别的,都是查看是否有记录,一般是作条件查询用的。select 1 from tab 中的 1 是一常量(可以为任意数值),查到的所有行的值都是它,但从效率上来说,1>anycol>*,因为不用查字典表。注意:当只关心数据表有多少记录行而不需要知道具体的字段值时,类似“select 1 from tab”是一个原创 2022-03-01 10:34:58 · 2121 阅读 · 0 评论 -
SQL 语句优化
SQL 语句优化原创 2022-03-01 10:18:14 · 4859 阅读 · 1 评论 -
Oracle:decode 函数
一、简述DECODE 函数是 ORACLE PL/SQL 的功能强大的函数之一,目前还只有 ORACLE 公司的 SQL 提供了此函数,其它数据库厂商的 SQL 实现还没有此功能。DECODE 有什么用途呢?先构造一个例子,假设想给职员加工资,其标准是:工资在 8000 元以下的加 20%;工资在 8000 元或以上的加 15%,通常的做法是,先选出记录中的工资字段值select salary into var-salary from employee然后对变量 var-salary 用 if-then原创 2022-03-01 09:58:31 · 281 阅读 · 0 评论 -
Oracle 的 instr()
一、instr()函数的格式(俗称:字符查找函数)格式一:instr( string1, string2 )/ instr(源字符串, 目标字符串)格式二:instr( string1, string2 [, start_position [, nth_appearance ] ] )/ instr(源字符串, 目标字符串, 起始位置, 匹配序号)解析:string2 的值要在string1中查找,是从start_position给出的数值(即:位置)开始在string1检索,检索第nth_app原创 2022-03-01 09:49:16 · 936 阅读 · 0 评论 -
Oracle 的分页查询~~~ROWNUM(行号)
一、Oracle 的分页Oracle 的表,除了建表时设计的各个字段,其实还有两个字段(此处只介绍 2 个),分别是 ROWID(行标示符)和 ROWNUM(行号)。即使使用 DESCRIBE命令查看表的结构,也无法看到这两个列的描述,因为它们只在数据库内部使用,所以也通常称它们为伪列(pseudo column)。建一个只有两个字段(id,col)的表。使用 describe 命令查看表结构,可以看到确实只有建表时的两个字段。但查询的时候,可以查找到伪列的值。select rowid,rownum,i原创 2022-03-01 09:47:29 · 5210 阅读 · 1 评论 -
MySQL 策略优化
MySQL 策略优化原创 2022-03-01 09:44:04 · 559 阅读 · 0 评论 -
JDBC 类型和 Java 类型的对应关系
Mybatis 明文建议在映射字段数据时,需要将 JdbcType 属性加上。这样相对来说是比较安全的。以下情况是在保证了前四种是不能为空的前提下,而后面几项为空时也不至于程序报错:<insert id="saveUserInfo"> insert into tab values ( #{Id}, #{name}, #{sex}, #{age}, #{createBy,jdbcType=VARCHAR},.原创 2022-02-27 16:05:45 · 268 阅读 · 0 评论 -
MySQL -- show index from table和analyze table t
一、show index from table该命令有助于诊断性能低下的查询,尤其是查询是否使用了可用的索引。下面介绍下 这个命令显示的结果列的含义:| Table | Non_unique | Key_name | Seq_in_index | Column_name | Collation | Cardinality | Sub_part | Packed | Null | Index_type | Comment |1️⃣Table:索引所在的表名2️⃣Non_unique:0表示该索引是唯一原创 2022-02-24 15:14:23 · 693 阅读 · 0 评论 -
union all 和 union
一、结果集允许重复的话,尽量用 union all 代替 union【union】不管检索结果有没有重复,都会尝试进行合并,然后在输出最终结果前进行排序、过滤操作,增加大量的 CPU 运算,加大资源消耗及延迟。【union all】不去重,效率高于 union。当然,union all 的前提条件是两个结果集没有重复数据。或者如果结果集允许重复的话,尽量使用 union all 代替 union 。二、合并(union all) 两个表并计算表中某个字段的总和假如表中数据如上表格,查询 a=‘01原创 2022-02-24 15:12:03 · 1293 阅读 · 0 评论 -
tinyint、smallint、mediumint、int、bigint
一、int(1) 和 tinyint(1) 的区别MySQL中设置了储存类型后,储存是定长的,int(1) 和 int(4) 在硬盘中所占的字节数都是一样的。因此整型的数据类型括号内的数字不管是多少,所占的存储空间都是一样,它存储的范围始终是 -2^31[-2,147,483,648] 到 2^31 - 1[2,147,483,647]。int(1) 和 int(4) 无论本身长度还是存储方式上都是一样的,区别就是显示的长度不同。但是要设置一个参数:如果列制定了zerofill 就会用0填充显示,int.原创 2022-02-24 15:08:10 · 2526 阅读 · 0 评论