自定义博客皮肤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 217

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

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

2022-02-08 15:39:43 188

原创 第二讲 日志系统:一条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 522

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

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

2022-02-08 12:37:30 100

原创 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 435 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 166

原创 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 116

原创 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 148

原创 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 2112

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

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

2020-10-09 21:21:06 245

原创 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 199

原创 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 163

原创 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 1086

原创 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 239

原创 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 418

原创 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 708

原创 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 207

原创 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 680

原创 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 140

原创 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 128

原创 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 81

原创 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 106

原创 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 112

原创 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 83

原创 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 180

原创 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 66

原创 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 224

原创 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 245

原创 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 69

原创 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 70

原创 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 142

原创 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 101

原创 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 292

原创 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 173

原创 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 114

原创 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 164

原创 Leetcode 每日一练

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

2020-07-07 09:55:41 105

原创 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 207

原创 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 90

原创 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 66

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

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

2020-04-04

空空如也

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

TA关注的人

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