MySQL入门集锦(三)

飞鸟冲,山猪冲,冲冲冲!!!

今天是关于MySQL中的函数版块,MySQL中的函数有很多,以下只是简单的列举了最为常用的几类,如果想要了解更多更详细,可以查看MySQL学习手册。

前面两次入门集锦链接如下:

MySQL入门集锦(一)

MySQL入门集锦(二)

一、函数

1、数学函数

abs(),绝对值

ceiling(),向上取整

round(),四舍五入

floor(),直接取整。

rand(),随机函数,返回[0-1.0]的浮点值

若要在i ≤r ≤ j这个范围得到一个随机整数r ,需要用到表达式 floor(i + rand() * (j – i + 1))。

例如,在[5,15]的范围内得到随机数,表达式应为:floor(5 + rand() * 11)

2、统计函数

sum(),求和

max(),最大值

min(),最小值

avg(),均值

count(),非Null计数

group_concat(),将分组后的某一列用一定的分割符连接在一起,默认为逗号隔开。

例如:select cat_id, group_concat(goods_id, '')from goods group by cat_id;

3、时间日期函数

dayofweek(),某天是星期中的第几天,周日为星期的第一天

dayofyear(),某天是一年中的第几天

week(),某天是一年中的第几个星期

curdate(),当前日期

curtime(),当前时间

4、加密函数

md5(),对值进行加密,不可逆。

5、系统调试函数

user函数(),返回“用户及所在主机”,判断自己的身份。

database(),返回当前所在操作的库名

version(),判断数据库的版本

6、控制流程函数

case when函数,类似于switch case函数

语法为:case 列名  when 列值 then 设值

               when 列值 then 设值

                .....

                end;

类似于三元运算符:if(表达式,为真时取值,否则取值);

char_length(), 返回字符长度,即字的长度

length(),返回字节长度,如下图,对于utf8编码,一个汉字占3个字节

position(),子串在字符串中第一次出现的位置

    原始表

  查询结果

left(字符串,长度)、right(长度,字符串)函数,取出字符串中左边或右边一定长度的子串

   取右边                  取左边

substring(字符串,pos),得到从pos开始的子串

二、视图

什么是视图?

答:视图是一张虚拟表,是我们通过一系列语句得到的可视化结果集,它存在但并不占内存。视图中的数据都是来自基本表,生成数图后可以像表一样进行查询操作。但是不是所有的视图都能够进行增删改操作,视图不能索引。由于视图是由表产生的,所以当表发生变化时,视图也会随之变化。

什么情况下视图可以进行增删改操作?

答:因为视图由表生成,所以当我们改变视图时,表也会变,但是如果视图与表不是一一对应的情况下,我们无法确定改变视图会对哪一行唯一的数据发生改变时,这是视图不不允许被进行增删改操作的。

创建视图的语法为:

create view 视图名称

as (查询语句);

删除视图的语法为:drop view 视图名称;

具体例子1(不能修改视图):首先创建一张视图,视图中包括的是栏目id和该栏目下所有商品的平均价格。

如上图的视图结果平均价格是设计多行数据得到的,所以我们无法对该视图增删改,因为我们不知道改变该视图的值之后,原表应该要怎么修改,其不存在唯一的改变结果。

具体例子2(可以修改视图):创建一张视图,视图中包括栏目4的所有商品。

此时这个视图与基表是一一对应的关系,所以可以对视图进行增删改的操作,当视图改变后,基表也会随着发生相应的改变。

视图有什么用?

1、可以简化我们的查询。比如:复杂的统计时,先用视图生成一个中间结果,再查询视图;或者一个表中的一些字段反复被使用时,可以将这些字段生成视图,再查询视图。

2、更加精细的权限控制。比如,某些用户表中的数据,针对不同的人群开放的字段不同,那么可以根据字段数量生成对应的视图供不同的用户使用。

3、数据多,同一类别的数据分表存储的时候,当我们需要对内容去进行查询的时候,我们可以先构建一个所有数据的视图,用于查询。

视图的algorithm概念:

答:引入algorithm的原因是我们在创建视图的时候,对于一些简单的视图并没有建立临时表,因为建立表所花费的时间更长。我们只是将条件保存起来,下次查询的时候,把条件合并直接去查表就可以了。而针对一些复杂的视图时,我们选择生成临时表。所以对于一个视图到底要不要建立临时表还是简单的合并语句,我们用algorithm来确定。

语法如下:

仅仅是合并语句,叠加:

create algorithm=merge view 视图名

as 查询语句;

创建临时表:

create algorithm=temptable view 视图名

as 查询语句;

当我们不确定合并还是建表时,只需要algorithm=undefined,由系统判断就可以了,合并或者建表得到的结果看不出任何差别,但是内部消耗是不用的。


华丽分割:以上是本人在观看mysql学习视频时整理出来的,希望对初学者有用处...如果有写得不对的,还希望大家指出来一起进步呀。

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值