星星博客 »  > 

MySQL基本函数、高阶函数、高级特性

MySQL基本函数、高阶函数、高级特性

  • 前言
  • 一、基础函数
    • 1.聚合函数
    • 2.数学函数
    • 3.字符串函数
    • 4.日期函数
    • 5.流程控制函数
  • 二、高阶函数
    • 1.拼接
  • 三、存储过程
    • 1.存储过程
  • 四、事务
    • 1.事务概念
  • 五、锁
    • 1.锁分类
  • 六、索引
    • 1.索引分类
  • 总结


前言

本文章主要记录MySQL常用的基础函数和高阶函数,顺带介绍一下存储过程、事务、索引等数据库高级特性


一、基础函数

1.聚合函数

-- 求和select sum() 			
-- 求平均值
select avg() 		 
-- 最大值	
select max() 	 
-- 最小值
select min() 		
-- 计数	
select count() 	

2.数学函数

-- 绝对值
select abs(-123)  => 123
-- 平方根
select sqrt(4)	  => 2
-- 取余
select mod(5/3)   => 2
-- 向上取整
select ceil(1.001) => 2
-- 向下取整
select floor(1.999) => 1
-- 四舍五入
select round(1.345) => 1     -- 默认保留整数
select round(1.345,2) =>1.35 -- 2为精度
-- 返回参数的符号
select sign(-3) => -1  -- 表示负数
select sign(3)	=> 1   -- 表示正数
-- 幂运算
select pow(3,2) => 9
-- 生成随机0~1的随机数
select rand()  => 0.4523423

3.字符串函数

-- 字节长度
select length('a我c') => 5  -- utf8mb4 3字节长度
-- 字符长度
select character_length('a我c') => 3 
-- 拼接字符串
select concat('我','要','火') => 我要火
-- 位置替换
select insert('FootBall'1,4'Basket') => BasketBall  -- 1,4为位置,从1开始
-- 内容替换
select replace('123abc123','123','456') => '456abc456'
-- 字符串截取 
select left('henrychen',5)  =>henry 5表示数量
select right('henrychen',4) =>chen  4表示数量
select mid('henrychen',6,4) =>chen  6表示下标,4表示数量
-- 大小写转换
select lower('ABC') =>  abc
select upper('abc') =>  ABC
-- 去两端空格
select trim('  abc  ') => abc
-- 字符串反转
select reverse=('abc') => cba

4.日期函数

-- 创建日期
select date('2021-1-1')  =>2021-1-1
-- 获取系统当前时间
select now();  => 2021-05-12 19:12:21
-- 获取系统当前日期
select curdate();      => 2021-05-12
select current_date(); => 2021-05-12
-- 获取时间
select current_time(); => 19:12:21
-- 获取当前系统时间戳
select unix_timestamp();  => 16374857
-- 格式化时间戳
select from_unixtime(16374857); => 19:12:21
-- 年
select year(now()); 	=>2021
-- 季度
select quarter(now()); => 2
-- 月
select month(now());	=>5
-- 年周
select weekofyear(now());	=>19
select week(now());
-- 年日
select dayofyear(now())	=>136
select day(now())
-- 月日
select day(now()) => 13
-- 周几
select weekday(date('2021-5-9'))	=>6   周一 ~ 周日 => 0~6
select dayofweek(date('2021-5-9'))	=>1   周七 ~ 周六 => 1~7
select dayname(date('2021-5-9'))	=>  Sunday

5.流程控制函数

-- if(LOGIC_EXPRESSION,VALUE1,VALUE2)函数
select if (true,0,1);   =>0
-- 空值判断
select ifnull(NULL,1)   =>1
select ifnull(2,1)      =>2
-- 多分支
select (case V when 1 then V1 when 2 then V2 else V3 end) ALIAS;  
select(case when V<=1 then V1 when v<=10 then V2 else V3 end) ALIAS; 

二、高阶函数

1.拼接

-- 行内拼接:拼接字符串
concat(F1,...,FN)
-- 行内拼接:指定分隔符
concat_ws(sep,F1,...FN)
-- 分组拼接:组内拼接字符串
group_concat(FIELD)
group_concat(FIELD separator '_')

三、存储过程

1.存储过程

procedure
	delimiter //
	create procedure pro_name(
    	in paramName TYPE,
        in ...,
        out outParamName TYPE,
        out ...,
        inout ioParamName TYPE
        inout...
    )
    begin
    	...
    end;
    delimiter;
    -- 特点
    	-- 多输出:输出参数
    	-- 查询操作
    	-- 嵌套事务

四、事务

1.事务概念

transaction(ACID)
	-- 在RDBMS中确保数据一致性的手段
	-- 特征
		-- A 原子性: 不可拆分
		-- C 一致性: 事务执行前后数据一致
		-- I 隔离性: 事物之间相互独立
		-- D 持久性: rollback/commit
	-- 应用
		set autocommit=0;
		...
		rollback/commit;

五、锁

1.锁分类

lock
	-- 锁规模
        -- 行锁	
        -- 表锁	
	-- 锁类型	
		-- 共享锁: 读	
			-- mysql中读默认不加锁:快照读 snapshot	
			-- select...lock in share mode; 添加共享锁	
			-- select...for update;添加排它锁	
		-- 独占锁: 写	
	

六、索引

1.索引分类

-- 索引
	-- 功能: 索引相对于数据,好比目录相对于字典
	-- 目的: 快查
	-- 本质: 一种数据结构:  BTree : 平衡树
	-- 优劣
		-- 优点: 寻址快
		-- 缺点: 
			-- 占用表空间
			-- 维系增删操作后索引树的平衡开销大
			-- 查询时索引不一定生效
	-- 分类
		-- 聚簇索引: 唯一决定数据物理存储顺序的索引
		-- 唯一索引: 辅助索引,相当于偏旁部首查字目录
		-- 全文索引: ElasticSearch:搜索引擎 => 倒排索引
		-- 普通索引
			-- 单列索引
			-- 组合索引
	-- 适合创建索引的列类型
		-- 频繁作为检索条件的列
		-- 数据变化比较大的数据列
	-- 索引何时会失效
		-- 多个索引字段作为条件,尤其是组合索引,不能使用or
		-- 字符串索引作为条件,模糊查询时,左侧不能出现 %
		-- 对索引列的值进行修改后(数值类型的列进行数学计算,对列进行函数调用)
		-- 联结查询,主外键字段编码格式不一样
		-- 逻辑计划优化阶段,评测结果为全表检索更优
		-- 多表联查,引擎优化后的物理计划主表
		-- 组合索引(a,b,c),条件组合方式非(a,ab,abc)
		-- where FILED is null
	-- 创建索引
		-- create [primary/unique/fulltext..] index IX_TABLE_FIELDS on TABLE_NAME(FIELD[,...])

总结

以上就是今天要讲的内容,本文简单记录了MySQL部分函数以及部分高级特性的概念,笔记会不断更新遇到的新的函数以及扩展的高级特性使用的工作笔记。

相关文章