Java 学习(2022-07-14)
1. MySQL 数据库
1.1 select 语句
distinct去重
select distinct name from user
as列取别名
select name as userName from users
- 统计多列和
select name, (stu_id + id) as total_sum from users
1.2 where 子句
1.2.1 比较运算符
BETWEEN ... AND...显示在某一区间的值IN(set)显示在 in 列表中的值,例如:in(100, 200)LIKE模糊查询NOT LIKEIS NULL判断是否为空
1.2.2 逻辑运算符
andornot不成立,例:where not (salary > 100)
1.3 order by 子句
asc升序desc降序order by应位于语句结尾
1.4 函数
1.4.1 count函数
count(列):统计满足条件的某列有多少个,会排除nullcount(*):返回满足条件的记录条数
// 统计表中记录条数
select count(*) from student
// 统计数学大于90分人数
select count(*) from where math > 90
// 统计语文列,不包含null值
select count(math) from student
1.4.2 sum 合计函数(一般用于数值列)
// 统计一个班数学总成绩
select sum(math) from student
// 统计班级语文和数学总成绩
select sum(math), sum(chiness) as 语文总成绩 from student
1.4.3 avg 平均函数
// 统计一个班数学平均分
select avg(math) from student
1.4.4 max 求最高函数
// 求出班级英语最高分
select max(english) from student
1.4.5 min 求最低函数
// 求出班级语文最低分
select min(chiness) from student
1.4.6 字符串相关函数
CHARSET(str)返回字符串字符集CONCAT(str1, str2)连接字符串INSTR(string, substring)返回substring在string中出现位置,没有返回0UCASE(string)转换成大写LCASE(string)转换成小写LEFT(string, length)从string中的左边起取length个字符LENGTH(string)string长度REPLACE(str, search, replace)在 str 中用 replace 替换 searchSTRCMP(string1, string2)比较两串大小SUBSTRING(str, position, length)从 str 的position开始,取length个字符LIRIM(string) RIRIM(string2) trim去掉前端空格或后端空格
-- select * from emp
-- - `CHARSET(str)` 返回字符串字符集
-- select CHARSET(ename) from emp
-- - `CONCAT(str1, str2)`连接字符串
-- select concat(ename, job) from emp;
-- - `INSTR(string, substring)` 返回substring在string中出现位置,没有返回 `0`
-- select instr("liyongqi", "q")
-- - `UCASE(string)` 转换成大写
-- select ucase("li")
-- - `LCASE(string)` 转换成小写
-- select lcase("SSSSSZZZZ")
-- - `LEFT(string, length)` 从string中的左边起取length个字符
-- select left("liyongqi", 2);
-- - `LENGTH(string)` string长度
-- select length("liyongqi")
-- - `REPLACE(str, search, replace)` 在 str 中用 replace 替换 search
-- select replace("liyongqi", "qi", "nb")
-- - `STRCMP(string1, string2)` 比较两串大小
-- select strcmp("2", "zz");
-- - `SUBSTRING(str, position, length)` 从 str 的position开始,取length个字符
-- select substring("liyongqi", 2, 3)
-- - `LIRIM(string) RIRIM(string2) trim` 去掉前端空格或后端空格
1.4.7 数学相关函数
ABS(num)绝对值BIN(decimal_number )十进制转二进制CEILING (number2 )向上取整,得到比num2大的最小整数CONV(number2,from_base,to_bas进制转换e)FLOOR (number2 )向下取整,得到比num2小的最大整数FORMAT (number,decimal_places )保留小数位数HEX (DecimalNumber )转十六进制LEAST (number , number2 )求最小值MOD (numerator ,denominator )求余RAND([seed])RAND([seed])其范围为0svS1.0
1.4.8 时间相关函数
CURRENT_DATE( )当前日期CURRENT_TIME( )当前时间CURRENT_TIMESTAMP ( )当前时间戳DATE(datetime )返回datetime的日期部分DATE_ADD (date2 ,INTERVAL d_value 在date2中加上日期或时间d_type )DATE_SUB (date2 ,INTERVAL d_value 在date2上减去一个时间 d_type )DATEDIFF (datei ,date2 )两个日期差(结果是天)TIMEDIFF(date1,date2)两个时间差(多少小时多少分钟多少秒)Now( )当前时间YEAR Month |DATE (datetime ) FROM_UNIXTIME()年月日
// CURRENT_DATE( ) 当前日期
select CURRENT_DATE 2022-07-14
// CURRENT_TIME( ) 当前时间
select CURRENT_TIME 11:25:08
// CURRENT_TIMESTAMP ( ) 当前时间戳
select CURRENT_TIMESTAMP 2022-07-14 11:24:19
// DATE(datetime ) // 返回datetime的日期部分
select now() // 返回 2022-07-14 11:24:19
// DATE_ADD (date2 ,INTERVAL d_value 在date2中加上日期或时间d_type )
// DATE_SUB (date2 ,INTERVAL d_value 在date2上减去一个时间 d_type )
// DATEDIFF (datei ,date2 )`两个日期差(结果是天)
//TIMEDIFF(date1,date2)`两个时间差(多少小时多少分钟多少秒)
Now( ) 当前时间
// YEAR Month |DATE (datetime ) FROM_UNIXTIME() 年月日
select TIMEDIFF("2011-11-11", "1990-01-01") from dual
select year(now()) // 2022
select month(now()) // 7
select FROM_UNIXTIME(1287472012, '%Y-%m-%d %H:%i:%s') // 2010-10-19 15:06:52
1.4.9 加密函数和系统函数
USER()查询用户DATABASE()数据库名称MD5(str)使用md5对str进行加密password(str)对已经用md5加密的字符串进行解密
1.5 group 子句 对列进行分组
// 根据 deptno 分组,分别查询各个部门的平均工资和最高工资
select avg(sal), max(sal), deptno
from emp
GROUP BY deptno
1.6 having 子句 对分组后的结果进行过滤
// 根据分组查询出来的结果,进行过滤
select avg(sal), deptno from emp
GROUP BY deptno
having avg(sal) < 900
1.7 mysql 外连接
1.7.1 外连接
- 左外连接(如果左侧的表完全显示,就称为左外连接)
select name, stu.id,grade
from exam LEFT JOIN stu
on exam.id = stu.id
- 右外连接(如果右侧的表完全显示,就称为右外连接)
select name, stu.id,grade
from exam RIGHT JOIN stu
on exam.id = stu.id
1.8 mysql 约束
- primary key 主键
- foreign key 外键
- check
- not null 非空
- unique(唯一) 该列值不能重复
1.9 mysql 索引 (空间换时间)
// 表示在 emp 表的 empno 列创建索引
create index empno_index on emp (empon)
- 当没有索引时,数据库会进行全表扫描,依次对比
- 有索引时,借用二叉树的底层原理,所以速度快
- 创建索引的代价是,磁盘占用以及影响(delete,update,insert)语句的效率
1.9.1 mysql 索引类型
- 主键索引,主键自动为主索引
- 唯一索引(unique)
- 普通索引(index)
- 全文索引(fulltext)【适用于MyISAM】 开发中考虑使用:全文搜索 Solr 和 ElasticSearch
-- 添加唯一索引
create unique index id_index on t25 (id)
-- 添加普通索引方式 1
create index id_index on t25 (id);
-- 添加普通索引方式 2
alter table t25 add index id_index (id)
-- 删除索引
drop index id_index on t25
-- 删除主键索引
alter table t26 drop primary key
-- 查询索引
-- 1. 方式
show index from t25
-- 2. 方式
show indexes from t25
-- 3. 方式
show keys from t25
1.10 mysql 事务
1.10.1 什么是事务
用于保证数据的一致性,它由一组相关的dml语句组成,要么该组dml语句全成功,要么全失败。如:转账。
1.10.2 事务和锁
当执行事务操作时(dml语句),mysql 会在表上加锁,防止其他用户改表的数据
start transaction-- 开始一个事务savepoint保存点名 -- 设置保存点rollback to保存点名 -- 回退事务rollback-- 回退全部事务commit-- 提交事务,所有操作生效,不能回退