索引
type
status
date
slug
summary
tags
category
icon
password
Property

 
索引就相当于一本书的目录,通过目录可以快速的找到对应的资源。那换到数据库中,索引的定义就是帮助存储引擎快速获取数据的一种数据结构,形象的说就是索引是数据的目录
所谓的存储引擎,说白了就是如何存储数据、如何为存储的数据建立索引和如何更新、查询数据等技术的实现方法。MySQL存储引擎有MyISAMInnoDBMemory,其中 InnoDB是在MySQL 5.5之后成为默认的存储引擎。
MySQL 的结构图,索引和数据就是位于存储引擎中:
notion image
 

索引的分类

JDBC
type
status
date
slug
summary
tags
category
icon
password
Property
 

JDBC是什么?

Java DataBase Connectivity(Java语言连接数据库)
 

JDBC的本质是什么?

JDBC是SUN公司制定的一套接口(interface)
java.sql.*; (这个软件包下有很多接口)
 
接口都有调用者和实现者。 面向接口调用、面向接口写实现类,这都属于面向接口编程
 
为什么要面向接口编程? 解耦合:降低程序的耦合度,提高程序的扩展力。 多态机制就是非常典型的:面向抽象编程。(不要面向具体编程)
日志和Buffer Pool
type
status
date
slug
summary
tags
category
icon
password
Property
目录
目录

 
一条查询语句经历的过程,这属于「读」一条记录的过程,如下图:
notion image
那么,执行一条update语句,期间发生了什么?,比如这一条update语句:
查询语句的那一套流程,更新语句也是同样会走一遍:
  • 客户端先通过连接器建立连接,连接器自会判断用户身份
  • 因为这是一条update语句,所以不需要经过查询缓存,但是表上有更新语句,是会把整个表的查询缓存清空的,所以说查询缓存很鸡肋,在MySQL 8.0就被移除这个功能了
范式
type
status
date
slug
summary
tags
category
icon
password
Property
 

什么是设计范式?

设计表的依据。按照这个三范式设计的表不会出现数据冗余
 

三范式都是哪些?

第一范式:任何一张表都应该有主键,并且每一个字段原子性不可再分。
第二范式:建立在第一范式的基础之上,所有非主键字段完全依赖主键,不能产生部分依赖。 多对多?三张表,关系表两个外键。
notion image
第三范式:建立在第二范式的基础之上,所有非主键字段直接依赖主键,不能产生传递依赖。 一对多?两张表,多的表加外键。
notion image
在实际的开发中,以满足客户的需求为主,有的时候会拿冗余换执行速度
select 执行流程
type
status
date
slug
summary
tags
category
icon
password
Property
目录
目录

总结一个完整的DQL语句
 
 
 
 
视图(view)
type
status
date
slug
summary
tags
category
icon
password
Property
 

什么是视图?

站在不同的角度去看到数据。(同一张表的数据,通过不同的角度去看待)。
 

怎么创建视图?怎么删除视图?

对视图进行增删改查,会影响到原表数据(通过视图影响原表数据的,不是直接操作的原表),可以对视图进行CRUD操作
一般,应该将视图用于检索(SELECT语句)而不用于更新(INSERT、UPDATE和DELETE)
 

面向视图操作?

 
子查询
type
status
date
slug
summary
tags
category
icon
password
Property
 

什么是子查询?子查询都可以出现在哪里?

select语句当中嵌套select语句,被嵌套的select语句是子查询。子查询可以出现在哪里?
 

where子句中使用子查询

案例:找出高于平均薪资的员工信息
 
notion image
 
使用MySQL
type
status
date
slug
summary
tags
category
icon
password
Property
 

使用MySQL

连接MySQL

登录mysql数据库管理系统,dos命令窗口:
notion image
注:
  • 命令输入在mysql>之后
🐼 PriorityQueue
type
status
date
slug
summary
tags
category
icon
password
Property
 
 
在银行柜台办业务时,假设只有一个柜台在办理业务,但是办理业务的人很多,怎么办?
可以每个人先取一个号,例如:A1A2A3……然后,按照号码顺序依次办理,实际上这就是一个Queue
如果这时来了一个VIP客户,他的号码是V1,虽然当前排队的是A10A11A12……但是柜台下一个呼叫的客户号码却是V1
要实现“VIP插队”的业务,用Queue就不行了,Queue会严格按FIFO的原则取出队首元素,需要的是优先队列:PriorityQueue
PriorityQueueQueue的区别在于,它的出队顺序与元素的优先级有关,对PriorityQueue调用remove()poll()方法,返回的总是优先级最高的元素。
要使用PriorityQueue,就必须给每个元素定义“优先级”:
放入的顺序是"apple""pear""banana",但是取出的顺序却是"apple""banana""pear",这是因为从字符串的排序看,"apple"排在最前面,"pear"排在最后面。
因此,放入PriorityQueue的元素,必须实现Comparable接口,PriorityQueue会根据元素的排序顺序决定出队的优先级。
 
🐼 EnumMap和TreeMap
type
status
date
slug
summary
tags
category
icon
password
Property
 
 

EnumMap

因为HashMap是一种通过对key计算hashCode(),通过空间换时间的方式,直接定位到value所在的内部数组的索引,因此,查找效率非常高。
如果作为key的对象是enum类型,那么,还可以使用Java集合库提供的一种EnumMap,它在内部以一个非常紧凑的数组存储value,并且根据enum类型的key直接定位到内部数组的索引,并不需要计算hashCode(),不但效率最高,而且没有额外的空间浪费。
DayOfWeek这个枚举类型为例,为它做一个“翻译”功能:
使用EnumMap的时候,我们总是用Map接口来引用它,因此,实际上把HashMapEnumMap互换,在客户端看来没有任何区别。
 
 

TreeMap

HashMap是一种以空间换时间的映射表,它的实现原理决定了内部的Key是无序的,即遍历HashMap的Key时,其顺序是不可预测的(但每个Key都会遍历一次且仅遍历一次)。
🍂 Swing中的特殊容器
type
status
date
slug
summary
tags
category
icon
password
Property
 
Swing提供了一些具有特殊功能的容器 , 这些特殊容器可以用于创建一些更复杂的用户界面。

使用JSplitPane

JSplitPane 用于创建一个分割面板,它可以将 一个组件(通常是一个容器)分割成两个部分,并提供一个分割条 , 用户可以拖动该分割条来调整两个部分的大小。
JSplitPane使用步骤:
  1. 创建JSplitPane对象
    1. 设置是否开启连续布局的支持(可选)
      1. 设置是否支持“一触即展”的支持(可选)
        1. 其他设置