![](https://img-blog.csdnimg.cn/20201014180756923.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
数据库
JustinNeil
年少是你未醒的梦话,风华是燃尽的彼岸花
展开
-
问题解决:VARCHAR类型数据排序
问题描述 在开发过程中,我们经常会遇到需要对数据排序的操作,但数据在库中的存储类型不一定是支持排序的,比如VARCHAR就不支持,那么如果和VARCHAR类型的数值进行排序呢。解决方案 cast(value as decimal),使用cast函数将VARCHAR类型的value字段转为decimal类型就可以排序了。其中CAST函数可转换的类型是有限制的,只能转成如下类型:二进制...原创 2019-10-24 07:43:41 · 732 阅读 · 0 评论 -
B+Tree
B+Tree定义B+树是B树的变体,也是一种多路搜索树:其定义基本与B树同,除了:1.非叶子结点的子树指针与关键字个数相同;2.非叶子结点的子树指针P[i],指向关键字值属于[K[i], K[i+1])的子树(B树是开区间);3.为所有叶子结点增加一个链指针;4.所有关键字都在叶子结点出现;B+的搜索与B-树也基本相同,区别是B+树只有达到叶子结点才命中(B树可以在非叶子结点命中),...原创 2019-07-30 09:40:42 · 135 阅读 · 0 评论 -
索引
索引概念在关系数据库中,索引是一种单独的、物理的对数据库表中一列或多列的值进行排序的一种存储结构,它是某个表中一列或若干列值的集合和相应的指向表中物理标识这些值的数据页的逻辑指针清单。索引的作用相当于图书的目录,可以根据目录中的页码快速找到所需的内容。索引提供指向存储在表的指定列中的数据值的指针,然后根据您指定的排序顺序对这些指针排序。数据库使用索引以找到特定值,然后顺指针找到包含该值的行。这...原创 2019-07-30 08:38:17 · 174 阅读 · 0 评论 -
密集索引和稀疏索引的区别
密集索引密集索引文件中每一个搜索码值都对应一个索引值,就是叶子节点保存的不只是键值,还保存了位于同一行记录里的其他列的信息,由于密集索引决定了表的物理排列顺序,一个表只有一个物理排列顺序,所以一个表只能创建一个密集索引稀疏索引稀疏索引文件只为索引码的某些值建立索引项, 比如 InnoDB的其他索引只存了键位信息和主键, MyISAM的所有索引都是InnoDB如果一个主键被定义了,那么这...原创 2019-07-30 08:08:31 · 904 阅读 · 0 评论 -
数据访问对象层Dao的设计
在基于MVC模式的框架中,Dao层处理的是访问数据库操作,本文以访问Emp表为例首先在bean包下创建与数据库中emp表对应的实体类Emppublic class Emp implements Serializable{ private static final long serialVersionUID = 456852456852L; @Column(values = "empn...原创 2019-05-29 15:36:23 · 568 阅读 · 0 评论 -
触发器
触发器在数据库中以独立的对象存储,它与存储过程和函数不同的是,存储过程和函数需要用户显式调用才能执行,而触发器是通过事件来启动运行,即当某个事件发生时自动的隐式运行,而且触发器不能接收参数。ORACLE中的事件指的是对表的INSERT,UPDATE,DELETE或对视图进行类似的操作,ORACLE 把触发器的功能扩展到了触发ORACLE,例如数据库的启动与关闭。所以触发器常用来完成由数据库完整...原创 2019-05-24 11:16:17 · 467 阅读 · 0 评论 -
存储过程
存储过程指的是经过编译后存储在数据库中,用户通过指定存储过程的名称及其参数来调用,存储过程中可以包含逻辑控制语句和数据操纵语句Demo:创建过程CREATE OR REPLACE PROCEDURE hello_say AS BEGIN DBMS_OUTPUT.put_line('hello_world'); END; /Demo:调用过程BEGIN hello_say...原创 2019-05-24 09:04:10 · 135 阅读 · 0 评论 -
耦合
耦合就是程序之间的依赖程度,确切一点就是上层代码对下层代码的依赖程度,依赖程度越高说明耦合越高,我们的目标是开发松耦合的代码,降低耦合的方法有很多种,使用接口就是解耦合的方案之一同样实现数据库的CRUD,若不使用接口,当操作的对象或使用的的数据库改变时,需要大量修改客户端的代码,若定义同样的标准,则可以减少依赖程度,这样的标准就是接口定义所有数据库操作的公共父接口public interfa...原创 2019-05-28 13:15:24 · 474 阅读 · 0 评论 -
PL/SQL中的程序控制
Demo:定义常量常量使用CONSTANT修饰,必须在定义时赋初值,不能改变常量的值DECLARE v_num CONSTANT NUMBER:=100; BEGIN DBMS_OUTPUT.put_line('v_num='||v_num); END;DECLARE v_num CONSTANT NUMBER:=100; BEGIN v_num:=200; DBM...原创 2019-05-23 19:16:42 · 239 阅读 · 0 评论 -
PL/SQL
PL/SQL也是一种程序语言,叫做过程化/SQL语言。PL/SQL是ORACLE对SQL语言的扩展,在普通SQL语句中加入了编程语言的特点。PL/SQL把数据操作和普通的SQL语句组织PL/SQL代码的过程性单元中,实现复杂的功能或者计算,PL/SQL只有ORACLE数据库才有。Demo: 输出hello_worldSET SERVEROUTPUT ON; BEGIN DBMS_OUTP...原创 2019-05-23 18:48:50 · 155 阅读 · 0 评论 -
分组统计查询
分组查询使用GROUP BY 关键字分组语法结构:SELECT *//4 FROM 数据来源,数据来源//1 WHERE 过滤条件//2 GROUP BY 分组字段//3 ORDER BY 排序字段 ASC|DESC;//5案例查询每个职位的平均工资SELECT job,AVG(sal) FROM emp GROUP BY job;查询每个部门的名称及其人数...原创 2019-05-18 20:28:48 · 443 阅读 · 0 评论 -
数据库连接池
对于一个简单的项目应用,由于对于数据库的访问不是很频繁。这时可以简单的在需要访问数据库时创建连接,用完后就关闭,也不会造成很大的性能能开销。但对于一个复杂的数据库应用,就不同了,频繁的建立,关闭连接,会极大地消耗系统的性能,因此对连接的使用造成了系统性能的瓶颈。此时可以在程序启动时创建一定数量的连接保存到容器里面,之后要取得连接直接在容器中取,不需要使用时再创建,使用完就回收到容器里,这样的容器...原创 2019-05-30 17:34:12 · 112 阅读 · 0 评论 -
Oracle常用函数
Oracle提供了几十个函数,但常用的不多,函数就是Oracle中定义好的,可以直接使用的指令COUNT(*|字段名):统计查询到的数据量SUM(字段名):计算指定字段的数据之和(字段值是数字的才有意义)AVG(字段名):计算指定字段的数据的平均值(字段值是数字才有意义)MAX(字段名):获取指定字段的数据的最大值(字段值是数字或日期才有意义)MIN(字段名):获取指定字段的数据的最小值...原创 2019-05-18 16:19:06 · 337 阅读 · 0 评论 -
DBUtil之查询数据
/** * 根据条件查询单个数据 * @param con * @param sql * @param cls * @param param * @return * @throws Exception */ public static<T> T selectOne(Connection con,String sql,Class<T> cls...原创 2019-05-27 17:37:44 · 846 阅读 · 0 评论 -
常见的SQL优化面试题
1.在表中建立索引,优先考虑 where group by 使用到的字段2.查询时尽量避免使用select * ,只查询需要用到的字段3.避免在where子句中使用关键字两边都是%的模糊查询,尽量在关键字后使用模糊查询4.尽量避免在where子句中使用IN 和NOT IN优化:能使用between就不用in在子查询中使用exists 子句5.尽量避免使用or,优化:可以用union代替...原创 2019-07-22 19:56:54 · 6596 阅读 · 0 评论 -
Hash索引与BitMap索引
Hash索引概念hash index是基于哈希表实现的,只有精确匹配索引所有列的查询才会生效。对于每一行数据,存储引擎都会对所有的索引列计算一个hash code,并将的有的hash code存储在索引中,同时在哈希表中保存指向每个数据行的指针。在MySQL中,只有Memory引擎显示支持哈希索引,也是默认索引类型。比如create table test_hash(fname varc...原创 2019-07-30 10:42:49 · 674 阅读 · 0 评论 -
MyISAM与InnoDB对比
MyISAM对比InnoDB简介区别表锁差异数据库文件差异索引差异简介1、MyISAM:默认表类型,它是基于传统的ISAM类型,ISAM是Indexed Sequential Access Method (有索引的顺序访问方法) 的缩写,它是存储记录和文件的标准方法。不是事务安全的,而且不支持外键,如果执行大量的查询,插入,MyISAM比较适合。2、InnoDB:支持事务安全的引擎,支持外键...原创 2019-08-04 17:13:55 · 162 阅读 · 0 评论 -
慢查询解决方案
慢查询解决方案 慢查询会降低应用的响应性能和并发性能。在业务量增加的情况下造成数据库所在的服务器CPU利用率急剧攀升,严重的会导致数据库不响应,只能重启解决。解决方法:将查询分成实时查询、近实时查询和离线查询。实时查询可穿透数据库,其它的不走数据库,可以用Elasticsearch来实现一个查询中心,处理近实时查询和离线查询读写分离。写走主库,读走从库索引优化。索引过多会影响数据库写...原创 2019-08-12 19:45:47 · 272 阅读 · 0 评论 -
如何保证缓存与数据库双写时的数据一致性
如何保证缓存与数据库双写是的数据一致性只要用到了缓存,就可能会涉及到缓存与数据库双存储双写,只要是双写,就一定会有数据一致性的问题,那么该如何解决一致性问题呢?一般来说,如果你的系统不是严格要求缓存+数据库必须一致,缓存可以稍微的跟数据库偶尔有不一致的情况,最好不要做这个方案,读请求和写请求串行化,串到一个内存队列里去,这样就可以保证一定不会出现不一致的情况串行化之后,就会导致系统的吞吐量会...原创 2019-08-06 11:16:50 · 296 阅读 · 0 评论 -
一条SQL语句执行很慢的原因有哪些?
一条SQL语句执行和很慢的原因有哪些?分类讨论偶尔很慢的情况数据库在刷新脏页拿不到锁一直很慢的情况没用上索引字段没有索引字段有索引,索引失效数据库自己选错索引了总结分类讨论一条 SQL 语句执行的很慢,那是每次执行都很慢呢?还是大多数情况下是正常的,偶尔出现很慢呢?所以我觉得,我们还得分以下两种情况来讨论。1、大多数情况是正常的,只是偶尔会出现很慢的情况。2、在数据量不变的情况下,这条SQ...原创 2019-08-05 14:58:14 · 296 阅读 · 0 评论 -
MySQL高性能优化规范建议
MySQL高性能优化规范建议数据库命名规范数据库基本设计规范数据库字段设计规范索引设计规范数据库SQL开发规范数据库操作行为规范数据库命名规范所有数据库对象名称必须使用小写字母并用下划线分割所有数据库对象名称禁止使用 MySQL 保留关键字(如果表名中包含关键字查询时,需要将其用单引号括起来)数据库对象的命名要能做到见名知意,并且最好不要超过 32 个字符临时库表必须以 tmp_为前缀...原创 2019-08-05 11:34:47 · 219 阅读 · 0 评论 -
SQL语句执行流程
SQL语句执行流程前言查询语句更新语句总结前言在上一篇文章中,我们介绍了MySQL的基础架构组成,本文来给大家介绍SQL语句在MySQL中是如何执行的。其实我们的 sql 可以分为两种,一种是查询,一种是更新(增加,更新,删除)。我们先分析下查询语句查询语句来看一个例子select * from tb_student A where A.age='18' and A.name=' 张...原创 2019-08-05 09:55:50 · 253 阅读 · 0 评论 -
MySQL基础架构分析
MySQL基础架构分析前言MySQL基本架构图Server层连接器查询缓存分析器优化器执行器存储引擎层前言本文将向大家介绍MySQL中的各种组件以及它们的功能,首先来看一张简要的架构图MySQL基本架构图在上图中我们可以看到MySQL的各部分组件主要分为两个大部分,Server层和存储引擎层Server层Server层主要包括连接器、查询缓存、分析器、优化器、执行器等,所有跨存储引擎...原创 2019-08-05 09:24:59 · 539 阅读 · 0 评论 -
数据库水平拆分解决方案
水平拆分解决方案客户端架构客户端架构的优点客户端架构的缺点代理架构代理架构的优点代理架构的缺点现有方案对比由于水平拆分牵涉的逻辑比较复杂,当前也有了不少比较成熟的解决方案。这些方案分为两大类:客户端架构和代理架构。客户端架构客户端架构通过修改数据访问层,如JDBC、Data Source、MyBatis,通过配置来管理多个数据源,直连数据库,并在模块内完成数据的分片整合,一般以jar包的方式...原创 2019-08-05 08:58:42 · 687 阅读 · 0 评论 -
水平拆分
水平拆分概述水平分库示例水平拆分的优点水平拆分的缺点分片原则概述水平拆分指的是通过某种策略将数据分片存储,包含库内分表和分库两种,每片数据会分散到不同的MySQL表或库,达到分布式的效果,能够支持非常大的数据量。前面的文章中提到的表分区本质上也是一种特殊的库内分表库内分表,仅仅解决了单一表数据过大的问题,由于没有把表的数据分布到不同的机器上,因此对于减轻MySQL服务器的压力来说,并没有太大...原创 2019-08-05 08:35:54 · 1504 阅读 · 0 评论 -
垂直拆分
垂直分库概念示例垂直拆分的优点垂直拆分的缺点概念垂直分库是根据数据库里面的数据表的相关性进行拆分,比如:一个数据库里面既存在用户数据,又存在订单数据,那么垂直拆分可以把用户数据放到用户库、把订单数据放到订单库。垂直分表是对数据表进行垂直拆分的一种方式,常见的是把一个多字段的大表按常用字段和非常用字段进行拆分,每个表里面的数据记录数一般情况下是相同的,只是字段不一样,使用主键关联示例比如原始...原创 2019-08-04 19:33:18 · 2188 阅读 · 0 评论 -
表分区
表分区简介分区的好处分区的限制和缺点分区的类型分区适合的场景简介MySQL在5.1版引入的分区是一种简单的水平拆分,用户需要在建表的时候加上分区参数,对应用是透明的无需修改代码对用户来说,分区表是一个独立的逻辑表,但是底层由多个物理子表组成,实现分区的代码实际上是通过对一组底层表的对象封装,但对SQL层来说是一个完全封装底层的黑盒子。MySQL实现分区的方式也意味着索引也是按照分区的子表定义...原创 2019-08-04 19:19:46 · 2081 阅读 · 0 评论 -
MySQL单表优化
MySQL单表优化单表优化概述字段优化索引优化SQL语句优化引擎优化系统调优参数升级硬件单表优化概述当MySQL单表记录数过大时,增删改查性能都会急剧下降,可以在以下几个方面进行优化除非单表数据未来会一直不断上涨,否则不要一开始就考虑拆分,拆分会带来逻辑、部署、运维的各种复杂度,一般以整型值为主的表在千万级以下,字符串为主的表在五百万以下是没有太大问题的。而事实上很多时候MySQL单表的...原创 2019-08-04 19:01:56 · 2277 阅读 · 0 评论 -
多表查询
如果查询的数据来源不只一张表,叫做多表查询,多表查询又叫做连接查询,多表查询会产生笛卡尔积,数据量大的时候尽量避免使用。笛卡尔积指的是两个集合之间的直积,两张表的笛卡尔积结果集的数量等于两张表结果集的乘积数量,会产生不存在的结果,因此要使用过滤条件去除笛卡尔积。多表查询格式SELECT * FROM 数据来源,数据来源 WHERE 过滤条件 ORDER BY 排序字段 AS...原创 2019-05-18 08:04:06 · 199 阅读 · 0 评论 -
数据库索引
索引是提高查询速度的一种手段,有很多种。切换管理员用户CONN SYS\CHANGE_ON_INSTALL AS SYSDBA;打开跟踪器SET AUTOTRACE ON;执行无索引状态的查询SELECT * FROM SCOTT.emp WHERE sal>2500;TABLE ACCESS FULL 代表查询数据时使用的是全表扫描使用索引查询创建索引基本语法...原创 2019-05-23 08:20:21 · 124 阅读 · 0 评论 -
JDBC添加数据
使用DrivergetConnect()取得的连接对象是Connection类型,如果要对数据库中的数据进行操作,我们还需要该对象取得另一个对象来发送SQL语句,要取得这个发送SQL语句的对象我们需要用到Connnetion中的这些方法:void close();//关闭数据库连接,使用完数据库连接之后必须关闭boolean isClose();//判断该连接是否关闭Statement cr...原创 2019-05-25 13:58:31 · 13088 阅读 · 1 评论 -
序列的使用
一般情况下每张数据表都会有一个字段作为数据的唯一区分标志,而且该字段的数据不能重复,这个字段叫做数据表的主键,需要手动指定主键值就很麻烦,可以使用ORACLE的序列实现主键的自增长。序列的基本语法:--删除序列DROP SEQUENCE 序列名;--创建序列CREATE SEQUENCE 序列名;--使用序列INSERT INTO 表名(主键字段名1,字段名2,字段名3...) VA...原创 2019-05-21 19:25:34 · 559 阅读 · 0 评论 -
JDBC
JDBC(Java Database Connective) Java数据库连接工具,使用对应的类库连接Java程序与数据库执行SQL语句MySQL驱动包下载地址:www.mvnrepository.com在上面下载mysql-connector-java这个包,建议下载较稳定的版本在项目中使用Build-path导入包使用java连接MySQL...原创 2019-05-25 11:04:32 · 118 阅读 · 0 评论 -
PLSQL数据库连接工具常见问题解决
第一种:监听程序无法识别连接描述中的服务找到文件“\Oracle\Product\10.2.0\db_1\network\ADMIN\listener.ora”加入下面内容SID_LIST_LISTENER= (SID_LIST= (SID_DESC= (SID_NAME=PLSExtProc) (ORACLE_HOME = d:\oracle\product\10.2.0\...原创 2019-05-21 17:09:06 · 617 阅读 · 0 评论 -
Windows下Oracle数据库的安装
Oracle官网上下载安装文件下载地址:https://www.oracle.com/technetwork/database/enterprise-edition/downloads/index.html目前Windows系统下支持的最新版本已经到Oracle Database 18c了,可根据需要下载对应版本。Oracle的安装下面以11g Release2版本为例介绍Oracle的...原创 2019-05-16 14:02:56 · 451 阅读 · 0 评论 -
事务的隔离级别
数据库事务的隔离级别由低到高分为:Read uncomitted(读未提交)、Read committed(读提交)、Repeatable read(可重复读)、Serializable(可序列化)。读未提交读事务允许其他事务读写同一条数据;写事务不允许其他事务写同一条数据,允许其他事务读。可通过“排他写锁”实现,只能解决更新丢失问题。读提交读事务允许其他事务读写同一条数据;写事务不允许...原创 2019-05-21 14:00:14 · 222 阅读 · 0 评论 -
事务的特性
如果一个数据库声称支持事务的操作,那么该数据库必须支持以下四个特性:原子性(Atomicity)一次事务中如果要进行多个数据操作,最终的结果要么所有数据操作都成功,要么所有数据操作都失败例如A转账给B100元,最终的结果要求A减少100元,B增加100元,不能出现A减少了但B没有增加一致性(Consistancy)一致性就是数据库中的事务操作要合乎逻辑例如A转账给B100元,最终的结果...原创 2019-05-21 10:59:43 · 135 阅读 · 0 评论 -
数据库设计的范式
数据库设计对数据的存储性能,还有开发人员对数据的操作都有莫大的关系。所以建立科学的,规范的的数据库是需要满足一些规范的来优化数据数据存储方式。在关系型数据库中这些规范就可以称为范式。范式是关系数据库理论的基础,也是我们在设计数据库结构过程中所要遵循的规则和指导方法。第一范式(1NF)确保数据库表中每一列的原子性,即每一列都是不可拆分的。比如数据库中的地址属性,如果系统中经常要求访问城市,则应该...原创 2019-05-24 16:51:55 · 182 阅读 · 0 评论 -
MySQL
MySQL是比ORACLE更小的一个数据库,比ORACLE更轻便,而且是开源的MySQL的历史简介MySQL最早来源于MySQL AB公司前身的ISAM于mSQL项目,于1996年发布的第一个版本MySQL 1.0,当时只支持SQL特性,没有事务支持。2003年12月,MySQL 5.0版本发布,提供了视图、存储过程等功能2008年一月,Sun公司以10亿美金收购了MySQL AB公司2...原创 2019-05-24 13:56:22 · 138 阅读 · 0 评论 -
数据库事务
事务的概念事务是访问数据库的一段操作序列,数据库应用系统通过事务集来完成对数据的存取。事务的正确执行使得数据库从一种状态转换成另一种状态,对数据库的一次操作就是一次事务,一次事务可能要执行多条SQL语句。事务的回滚与提交在数据库中进行数据修改操作时可能会在一次操作中执行多条SQL语句例如转账操作,转账操作可能会在一个账户的金额减少后出现BUG导致另一个账户的金额没有增加。解决上述问题的方...原创 2019-05-20 13:55:51 · 129 阅读 · 0 评论