自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(129)
  • 资源 (1)
  • 收藏
  • 关注

原创 第四讲 深入浅出索引

第四讲 深入浅出索引比如某一个 SQL 查询比较慢,分析完原因之后,你可能就会说“给某个字段加个索引吧”之类的解决方案。但到底什么是索引,索引又是如何工作的呢?索引是数据库系统里面最重要的概念之一,一句话简单来说,索引的出现其实就是为了提高数据查询的效率,就像书的目录一样。一本 500 页的书,如果你想快速找到其中的某一个知识点,在不借助目录的情况下,那我估计你可得找一会儿。同样,对于数据库的表而言,索引其实就是它的“目录”。索引的常见模型索引的出现是为了提高查询效率,但是实现索引的方式却有很多种,所

2022-02-08 16:44:05 212

原创 第三讲 事务隔离:为什么你改了我还看不见?

第三讲 事务隔离:为什么你改了我还看不见?提到事务,你肯定不陌生,和数据库打交道的时候,我们总是会用到事务。最经典的例子就是转账,你要给朋友小王转 100 块钱,而此时你的银行卡只有 100 块钱。转账过程具体到程序里会有一系列的操作,比如查询余额、做加减法、更新余额等,这些操作必须保证是一体的,不然等程序查完之后,还没做减法之前,你这 100 块钱,完全可以借着这个时间差再查一次,然后再给另外一个朋友转账,如果银行这么整,不就乱了么?这时就要用到“事务”这个概念了。简单来说,事务就是要保证一组数据库操作

2022-02-08 15:39:43 183

原创 第二讲 日志系统:一条SQL更新语句是如何执行的?

第二讲 日志系统:一条SQL更新语句是如何执行的?一条查询语句的执行过程一般是经过连接器、分析器、优化器、执行器等功能模块,最后到达存储引擎。那么,一条更新语句的执行流程又是怎样的呢?我们还是从一个表的一条更新语句说起,下面是这个表的创建语句,这个表有一个主键 ID 和一个整型字段 c:mysql> create table T(ID int primary key, c int);如果要将 ID=2 这一行的值加 1,SQL 语句就会这么写:`mysql> update T set c

2022-02-08 13:15:32 515

原创 第一讲 一条SQL查询语句是如何执行的?

第一讲 一条SQL查询语句是如何执行的?MySQL 的逻辑架构图大体来说,MySQL 可以分为 Server 层和存储引擎层两部分。Server 层包括连接器、查询缓存、分析器、优化器、执行器等,涵盖 MySQL 的大多数核心服务功能,以及所有的内置函数(如日期、时间、数学和加密函数等),所有跨存储引擎的功能都在这一层实现,比如存储过程、触发器、视图等。而存储引擎层负责数据的存储和提取。其架构模式是插件式的,支持 InnoDB、MyISAM、Memory 等多个存储引擎。现在最常用的存储引擎是 In

2022-02-08 12:37:30 93

原创 ridis常用五大数据类型和api

命令 描述SET key value 设置指定 key 的值GET key 获取指定 key 的值。GETRANGE key start end 返回 key 中字符串值的子字符GETSET key value 将给定 key 的值设为 value ,并返回 key 的旧值(old value)。GETBIT key offset 对 key 所储存的字符串值,获取指定偏移量上的位(bit)。MGET key1 [key2…] 获取所有(一个或多个)给定 key 的值。SETBIT key o

2021-04-15 11:36:06 413 1

原创 ridis的安装与遇到的问题

遇到问题正在等待缓存锁:无法获得锁 /var/lib/dpkg/lock-frontend。锁正由进程 20277(unatlinux下载官方软件安装包时由于没有镜像速度很慢,如果意外退出下载,第二次进入下载的时候缓存会被锁住,以下三行命令完美解锁。sudo rm /var/lib/dpkg/lock-frontendsudo rm /var/cache/apt/archives/locksudo rm /var/lib/dpkg/lock启动 Redisredis-server查看

2021-04-14 15:33:48 156

原创 jQuery 元素筛选

eq() 获取给定索引的元素 功能跟 :eq() 一样first() 获取第一个元素 功能跟 :first 一样last() 获取最后一个元素 功能跟 :last 一样filter(exp) 留下匹配的元素is(exp) 判断是否匹配给定的选择器,只要有一个匹配就返回,truehas(exp) 返回包含有匹配选择器的元素的元素 功能跟 :has 一样not(exp) 删除匹配选择器的元素 功能跟 :not 一样children(exp) 返回匹配给定选择器的子元素 功能跟 parent>

2021-03-17 17:40:36 107

原创 Spring Security介绍与使用

Spring Security概述Spring Security介绍Spring Security 的前身是 Acegi Security ,是 Spring 项目组中用来提供安全认证服务的框架。(https://projects.spring.io/spring-security/) Spring Security 为基于J2EE企业应用软件提供了全面安全服务。特别是使用领先的J2EE解决方案-Spring框架开发的企业软件项目。人们使用Spring Security有很多种原因,不过通常吸引他们的是

2020-10-15 22:18:28 144

原创 PageHelper的概述和基本使用

PageHelper介绍PageHelper是国内非常优秀的一款开源的mybatis分页插件,它支持基本主流与常用的数据库,例如mysql、oracle、mariaDB、DB2、SQLite、Hsqldb等。本项目在 github 的项目地址:https://github.com/pagehelper/Mybatis-PageHelper本项目在 gitosc 的项目地址:http://git.oschina.net/free/Mybatis_PageHelperPageHelper使用集成引入

2020-10-11 15:51:11 2038

原创 oracle 数据库触发器及触发器的使用

—触发器,就是制定一个规则,在我们做增删改操作的时候,----只要满足该规则,自动触发,无需调用。----语句级触发器:不包含有for each row的触发器。–行级触发器:包含有for each row的就是行级触发器。-----加for each row是为了使用:old或者:new对象或者一行记录。----语句级触发器----插入一条记录,输出一个新员工入职create or replace trigger t1afterinserton persondeclareBEGIN

2020-10-09 21:21:06 242

原创 oracle 数据库 存储函数和存储过程的使用 和 区别

—存储过程—存储过程:存储过程就是提前已经编译好的一段pl/sql语言,放置在数据库端—可以直接被调用。这一段pl/sql一般都是固定步骤的业务。—给指定员工涨100块钱create or replace procedure p1(eno emp.empno%type)isbeginupdate emp set sal=sal+100 where empno = eno;commit;end;—测试p1select * from emp where EMPNO=7788;DECLAR

2020-10-09 20:56:35 190

原创 oracle 数据库 pl/sql编程语言定义变量判断循环游标的使用

—pl/sql编程语言—p1/sq1编程语言是对sq1语言的扩展, 使得sql语言具有过程化编程的特性。—pl/sql.编程语言比一般的过程化编程语言,更加灵活高效。—pl/sql编程语言主要用来编写存储过程和存储函数等。—声明方法—赋值操作可以使用:=也可以使用into语句赋值DECLAREi NUMBER(2) :=10;s VARCHAR2(10) :=‘小明’;ena EMP.ENAME%TYPE;—引用型变量emprow emp%rowtype;—记录型变量BEGINdbm

2020-10-09 20:21:32 158

原创 oracle 数据库 视图的作用和创建

—视图—视图的概念:视图就是提供一个查询的 窗口,所有的数据来自于原表—查询语句创建表CREATE TABLE emp as SELECT * from SCOTT.EMP;select * from emp;—创建视图必须有dba权限CREATE VIEW v_emp as SELECT ename,job FROM emp;—查询视图SELECT * from v_emp;—修改视图[不推荐]UPDATE v_emp set job=‘CLERK’ where ename=‘ALLE

2020-10-09 16:53:53 1062

原创 oracle 数据库分页查询

—oracle中的 分页—rownum行号:当我们做select操作的时候,—每查询出一行记录,就会在该行上加一个行号—行号从1开始,依次递增,不能跳着走。—emp表工资倒叙排列后,每页五条记录,查询第二页—排序操作会影响rownum的顺序select ROWNUM,e.* FROM emp eORDER BY e.SAL DESC;—如果涉及到排序,但是还要使用rownum的话,我们可以再次嵌套查询select ROWNUM,t.* from(select ROWNUM,e.* FRO

2020-10-09 16:40:23 230

原创 oracle 数据库内连接外连接,子查询

—多表查询中的一些概念—笛卡尔积select * from emp e,dept d;—等值连接SELECT * from emp e,dept dwhere e.DEPTNO=d.DEPTNO;—内连接select * from emp e INNER JOIN DEPT don e.DEPTNO=d.DEPTNO;—查询出所有部门,以及部门下的 员工信息【外连接】SELECT * from EMP e RIGHT JOIN DEPT don e.DEPTNO=d.DEPTNO;—

2020-10-09 16:19:15 402

原创 oracle 数据库常见的分组查询

—分组查询—分组查询中,出现在group by后面的原始列,才能出现在select后面—没有出现在group by后面的列,想在select后面,必须加上:聚合函数。—聚合函数有一个特性,可以把多行记录变成一个值。—查询出每个部门的平均工资select e.DEPTNO,AVG(e.SAL)from emp egroup by e.DEPTNO;—查询出平均工资高于2000的部门信息select e.DEPTNO,AVG(e.SAL) asalfrom emp egroup by e.

2020-10-09 11:37:55 699

原创 oracle 数据库常见的多行函数【聚合函数】

—多行函数[聚合函数]:作用于多行,返回一个值—查询总数量select count(1) from emp;—查询总数量select sum(SAL) from emp;—工资总和select max(SAL) from emp;—最大工资select min(SAL) from emp;—最低工资select avg(SAL) from emp;—平均工资...

2020-10-09 11:10:45 200

原创 oracle 数据库常见的条件表达式

—条件表达式—条件表达式通用写法mysql oracle通用—给emp表中员工起中文名—else可以省略, end不能省略SELECT e.ename,case e.enamewhen ‘SMITH’ then ‘张三’when ‘ALLEN’ then ‘李四’when ‘WARD’ then ‘王五’else ‘无名’endfrom emp e;—判断emp表中员工工资,如果高于3000显示高收入,—如果低于3000高于1500显示中等收入—其余显示低收入SELECT em

2020-10-09 11:04:55 652

原创 oracle 数据库常见的单行函数

—单行函数:作用于一行,返回一个值—字符函数—dual 虚表没有实际意义—小写变大写SELECT upper(‘yes’) from dual;—大写变小写SELECT lower(‘YES’) from dual;—数值函数—四舍五入函数,后面的参数表示保留几位小数SELECT ROUND(26.16,1)FROM dual;—直接截取,不在看后面位数的数字是否大于5SELECT TRUNC(26.16, 2) FROM dual;—求余数SELECT mod(10,3) FRO

2020-10-09 10:46:45 134

原创 Leetcode 每日一练

字符串相加给定两个字符串形式的非负整数 num1 和num2 ,计算它们的和。注意:num1 和num2 的长度都小于 5100.num1 和num2 都只包含数字 0-9.num1 和num2 都不包含任何前导零。你不能使用任何內建 BigInteger 库, 也不能直接将输入的字符串转换为整数形式。代码:class Solution { public String addStrings(String num1, String num2) { StringBuild

2020-08-03 09:14:29 126

原创 Leetcode 每日一练

整数拆分给定一个正整数 n,将其拆分为至少两个正整数的和,并使这些整数的乘积最大化。 返回你可以获得的最大乘积。示例 1:输入: 2输出: 1解释: 2 = 1 + 1, 1 × 1 = 1。示例 2:输入: 10输出: 36解释: 10 = 3 + 3 + 4, 3 × 3 × 4 = 36。说明: 你可以假设 n 不小于 2 且不大于 58。代码:class Solution { public int integerBreak(int n) { if (n

2020-07-30 10:29:02 79

原创 Leetcode 每日一练

返回倒数第 k 个节点实现一种算法,找出单向链表中倒数第 k 个节点。返回该节点的值。注意:本题相对原题稍作改动示例:输入: 1->2->3->4->5 和 k = 2输出: 4说明:给定的 k 保证是有效的。代码:class Solution { public int kthToLast(ListNode head, int k) { List<Integer> array = new ArrayList();

2020-07-29 09:44:25 99

原创 Leetcode 每日一练

判断子序列给定字符串 s 和 t ,判断 s 是否为 t 的子序列。你可以认为 s 和 t 中仅包含英文小写字母。字符串 t 可能会很长(长度 ~= 500,000),而 s 是个短字符串(长度 <=100)。字符串的一个子序列是原始字符串删除一些(也可以不删除)字符而不改变剩余字符相对位置形成的新字符串。(例如,"ace"是"abcde"的一个子序列,而"aec"不是)。示例 1:s = “abc”, t = “ahbgdc”返回 true.示例 2:s = “axc”, t = “

2020-07-27 11:09:19 94

原创 Leetcode 每日一练

最小高度树给定一个有序整数数组,元素各不相同且按升序排列,编写一个算法,创建一棵高度最小的二叉搜索树。示例:给定有序数组: [-10,-3,0,5,9],一个可能的答案是:[0,-3,9,-10,null,5],它可以表示下面这个高度平衡二叉搜索树: 0 / \ -3 9 / / -10 5 代码:class Solution { public TreeNode sortedArrayToBST(int[] nums) {

2020-07-26 10:21:26 78

原创 Leetcode 每日一练

数组中两元素的最大乘积给你一个整数数组 nums,请你选择数组的两个不同下标 i 和 j,使 (nums[i]-1)*(nums[j]-1) 取得最大值。请你计算并返回该式的最大值。示例 1:输入:nums = [3,4,5,2]输出:12解释:如果选择下标 i=1 和 j=2(下标从 0 开始),则可以获得最大值,(nums[1]-1)(nums[2]-1) = (4-1)(5-1) = 3*4 = 12 。示例 2:输入:nums = [1,5,4,5]输出:16解释:选择下标 i=

2020-07-26 09:43:29 174

原创 Leetcode 每日一练

二进制链表转整数给你一个单链表的引用结点 head。链表中每个结点的值不是 0 就是 1。已知此链表是一个整数数字的二进制表示形式。请你返回该链表所表示数字的 十进制值 。示例 1:输入:head = [1,0,1]输出:5解释:二进制数 (101) 转化为十进制数 (5)示例 2:输入:head = [0]输出:0示例 3:输入:head = [1]输出:1示例 4:输入:head = [1,0,0,1,0,0,1,1,1,0,0,0,0,0,0]输出:18880示例 5

2020-07-25 10:29:38 65

原创 Leetcode 每日一练

最小路径和给定一个包含非负整数的 m x n 网格,请找出一条从左上角到右下角的路径,使得路径上的数字总和为最小。说明:每次只能向下或者向右移动一步。输入:[[1,3,1],[1,5,1],[4,2,1]]输出: 7解释: 因为路径 1→3→1→1→1 的总和最小。代码:class Solution { public int minPathSum(int[][] grid) { int m = grid.length; int n = gri

2020-07-23 09:56:52 214

原创 Leetcode 每日一练

访问所有点的最小时间平面上有 n 个点,点的位置用整数坐标表示 points[i] = [xi, yi]。请你计算访问所有这些点需要的最小时间(以秒为单位)。你可以按照下面的规则在平面上移动:每一秒沿水平或者竖直方向移动一个单位长度,或者跨过对角线(可以看作在一秒内向水平和竖直方向各移动一个单位长度)。必须按照数组中出现的顺序来访问这些点。示例 1:输入:points = [[1,1],[3,4],[-1,0]]输出:7解释:一条最佳的访问路径是: [1,1] -> [2,2] -&

2020-07-21 10:28:39 228

原创 Leetcode 每日一练

统计位数为偶数的数字给你一个整数数组 nums,请你返回其中位数为 偶数 的数字的个数。示例 1:输入:nums = [12,345,2,6,7896]输出:2解释:12 是 2 位数字(位数为偶数)345 是 3 位数字(位数为奇数)2 是 1 位数字(位数为奇数)6 是 1 位数字 位数为奇数)7896 是 4 位数字(位数为偶数)因此只有 12 和 7896 是位数为偶数的数字示例 2:输入:nums = [555,901,482,1771]输出:1解释:只有 1771

2020-07-21 09:44:41 68

原创 Leetcode 每日一练

两数之和 II - 输入有序数组给定一个已按照升序排列 的有序数组,找到两个数使得它们相加之和等于目标数。函数应该返回这两个下标值 index1 和 index2,其中 index1 必须小于 index2。说明:返回的下标值(index1 和 index2)不是从零开始的。你可以假设每个输入只对应唯一的答案,而且你不可以重复使用相同的元素。示例:输入: numbers = [2, 7, 11, 15], target = 9输出: [1,2]解释: 2 与 7 之和等于目标数 9 。因此

2020-07-20 09:54:37 66

原创 Leetcode 每日一练

拿硬币桌上有 n 堆力扣币,每堆的数量保存在数组 coins 中。我们每次可以选择任意一堆,拿走其中的一枚或者两枚,求拿完所有力扣币的最少次数。示例 1:输入:[4,2,1]输出:4解释:第一堆力扣币最少需要拿 2 次,第二堆最少需要拿 1 次,第三堆最少需要拿 1 次,总共 4 次即可拿完。示例 2:输入:[2,3,10]输出:8限制:1 <= n <= 41 <= coins[i] <= 10代码:class Solution { public

2020-07-19 09:40:34 137

原创 Leetcode 每日一练

IP 地址无效化给你一个有效的 IPv4 地址 address,返回这个 IP 地址的无效化版本。所谓无效化 IP 地址,其实就是用 “[.]” 代替了每个 “.”。示例 1:输入:address = “1.1.1.1”输出:“1[.]1[.]1[.]1”示例 2:输入:address = “255.100.50.0”输出:“255[.]100[.]50[.]0”提示:给出的 address 是一个有效的 IPv4 地址代码:class Solution { public S

2020-07-17 09:56:41 89

原创 Leetcode 每日一练

好数对的数目给你一个整数数组 nums 。如果一组数字 (i,j) 满足 nums[i] == nums[j] 且 i < j ,就可以认为这是一组 好数对 。返回好数对的数目。示例 1:输入:nums = [1,2,3,1,1,3]输出:4解释:有 4 组好数对,分别是 (0,3), (0,4), (3,4), (2,5) ,下标从 0 开始示例 2:输入:nums = [1,1,1,1]输出:6解释:数组中的每组数字都是好数对示例 3:输入:nums = [1,2,3]

2020-07-16 15:39:48 283

原创 Leetcode 每日一练

按既定顺序创建目标数组给你两个整数数组 nums 和 index。你需要按照以下规则创建目标数组:目标数组 target 最初为空。按从左到右的顺序依次读取 nums[i] 和 index[i],在 target 数组中的下标 index[i] 处插入值 nums[i] 。重复上一步,直到在 nums 和 index 中都没有要读取的元素。请你返回目标数组。题目保证数字插入位置总是存在。示例 1:输入:nums = [0,1,2,3,4], index = [0,1,2,2,1]输出:[0

2020-07-16 09:47:35 164

原创 Leetcode 每日一练

买卖股票的最佳时机给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格。如果你最多只允许完成一笔交易(即买入和卖出一支股票一次),设计一个算法来计算你所能获取的最大利润。注意:你不能在买入股票前卖出股票。示例 1:输入: [7,1,5,3,6,4]输出: 5解释: 在第 2 天(股票价格 = 1)的时候买入,在第 5 天(股票价格 = 6)的时候卖出,最大利润 = 6-1 = 5 。注意利润不能是 7-1 = 6, 因为卖出价格需要大于买入价格;同时,你不能在买入前卖出股票。示例

2020-07-10 09:03:46 108

原创 Leetcode 每日一练

整数的各位积和之差给你一个整数 n,请你帮忙计算并返回该整数「各位数字之积」与「各位数字之和」的差。示例 1:输入:n = 234输出:15解释:各位数之积 = 2 * 3 * 4 = 24各位数之和 = 2 + 3 + 4 = 9结果 = 24 - 9 = 15示例 2:输入:n = 4421输出:21解释:各位数之积 = 4 * 4 * 2 * 1 = 32各位数之和 = 4 + 4 + 2 + 1 = 11结果 = 32 - 11 = 21代码: class

2020-07-09 11:00:14 157

原创 Leetcode 每日一练

路径总和给定一个二叉树和一个目标和,判断该树中是否存在根节点到叶子节点的路径,这条路径上所有节点值相加等于目标和。说明: 叶子节点是指没有子节点的节点。示例:给定如下二叉树,以及目标和 sum = 22, 5 / \ 4 8 / / \ 11 13 4 / \ \ 7 2 1返回 true, 因为存在目标和为 22 的根节点到叶子节点的路径 5->4-&

2020-07-07 09:55:41 100

原创 Leetcode 每日一练

不同路径 II一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为“Start” )。机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为“Finish”)。现在考虑网格中有障碍物。那么从左上角到右下角将会有多少条不同的路径?网格中的障碍物和空位置分别用 1 和 0 来表示。说明:m 和 n 的值均不超过 100。示例 1:输入:[[0,0,0],[0,1,0],[0,0,0]]输出: 2解释:3x3 网格的正中间有一个障碍物。从左

2020-07-06 10:41:49 199

原创 Leetcode 每日一练

宝石与石头给定字符串J 代表石头中宝石的类型,和字符串 S代表你拥有的石头。 S 中每个字符代表了一种你拥有的石头的类型,你想知道你拥有的石头中有多少是宝石。J 中的字母不重复,J 和 S中的所有字符都是字母。字母区分大小写,因此"a"和"A"是不同类型的石头。示例 1:输入: J = “aA”, S = “aAAbbbb”输出: 3示例 2:输入: J = “z”, S = “ZZ”输出: 0注意:S 和 J 最多含有50个字母。J 中的字符不重复。暴力破解:代码:class

2020-07-05 09:32:30 83

原创 Leetcode 每日一练

数组异或操作给你两个整数,n 和 start 。数组 nums 定义为:nums[i] = start + 2*i(下标从 0 开始)且 n == nums.length 。请返回 nums 中所有元素按位异或(XOR)后得到的结果。示例 1:输入:n = 5, start = 0输出:8解释:数组 nums 为 [0, 2, 4, 6, 8],其中 (0 ^ 2 ^ 4 ^ 6 ^ 8) = 8 。“^” 为按位异或 XOR 运算符。示例 2:输入:n = 4, start = 3输

2020-07-04 08:28:51 63

myemployees用的时候把这里和文件中文删除.sql

文章MySQL基础中用的数据表。

2020-04-04

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除