您的位置:首页 > 博客中心 > 数据库 >

Java学习总结(十八)——MySQL数据库(4)MySQL数据库中的视图,函数,存储过程中常见循环

时间:2022-03-16 11:26

一.MySQL存储过程中常见的循环
1.while循环:WHILE.....DO.....END WHILE
例1:
创建存储过程(求1+2+.......+num的和):
技术分享图片
创建成功,进行调用:
技术分享图片
显示结果:
技术分享图片
2.REPEAT循环: REPEAT.........UNTLL END REPEAT
例2:
创建存储过程:
技术分享图片
创建完成,调用存储过程:
技术分享图片
显示结果:
技术分享图片
3.LOOP循环:LOOP END LOOP
例3:
创建存储过程:
技术分享图片
创建成功,调用存储过程:
技术分享图片
显示结果:
技术分享图片
二.MySQL中的视图
1.概念:有结构(有行有列),但没有结果(结构中不真实存储数据)的虚拟的表,虚拟表的结构来源不是自己定义的,而是从对应的基表中产生(视图数据的来源)
2.创建视图语法:
技术分享图片

例1(创建单表视图):
技术分享图片
例2(创建多表视图)
技术分享图片
3.查看视图,其实视图就是一张虚拟表,那关于查询表的语句,对视图都是可以用的
比如:show tables; desc my_view1;
技术分享图片
查询视图my_view2中的表数据:
技术分享图片
显示结果:
技术分享图片
但是在查看视图创建语句的时候,把tables改成view
例:
技术分享图片
显示结果:
技术分享图片
4.视图一旦创建,系统会在视图对应的数据库文件下,创建一个对应的结构文件:frm文件
5.视图的使用:视图的使用,只是为了查询,你可把视图当做表一样去使用,例如:select from my_view1;
技术分享图片
显示结果:
技术分享图片
(视图的执行:其本质就是执行封装的select 语句)
6.视图的删除:drop view 视图名称
7.视图的修改:视图本身不可以修改,但是视图的来源是可以修改的(其实就是修改select 语句)
语法:alter view 视图名称 as 新的select 语句;
例:
技术分享图片
显示结果:
技术分享图片
8.视图的意义:
(1)视图可以节省SQL语句,将一条复杂的查询语句,使用视图进行保存,以后可以对视图进行操作
(2)数据安全,视图操作注意是针对查询语句的,如果对视图结构进行处理(比如删除),不会影响基表的数据.
所以相对来说数据比较安全
(3)视图往往是在大项目中去使用,而且是多系统中去使用.我可以对外提供一些有用的数据,隐藏一些关键的数据.
(4)视图对外可以提供友好的数据:不同的视图提供不同的数据,对外提供的数据好像是经过专门设计的一样.
(5)视图可以更好的进行权限控制 比如对外隐藏我的一些基表的名称
9.视图数据的操作:视图是可以进行数据操作的(比如 增,删,改,视图中的数据),但是有很多限制
(1)插入数据数据:
#1.多表视图不能插入数据
#2.单表视图中可以插入数据(如果视图中字段没有基表中不能为空的字段且没有默认值的字段,是插入不成功的)
#3.视图是可以向基表中插入数据的 (视图的操作是影响基表的)
(2)视图数据删除:
#1.多表视图不能删除数据
#2.单表视图可以删除数据,也会影响到基表
(3)视图更新数据:
#1.单表视图,多表视图都可以更新数据
更新限制:with check option
例如:create view my_view1 as select
from students where age>30 with check option;

表示视图数据的来源都是年龄大于30的,with check option 决定通过视图更新的时候,不能将已得到数据age>30的学生 改成age小于30 的,那么:update my_v1 set age=20 where id=1; 就会报错 不允许改 因为做了限制

三.MySQL数据库中的函数

1.系统函数:直接调用即可,任何函数都有返回值,函数的调用是通过select调用,因为有返回值,所以只能用select调用
mysql中字符串是以单个字符为单位的:

(1)Substring(原字符串,从哪个地方,截取几个);mysql中下标从1开始算起
例如:定义一个变量:

技术分享图片

显示结果:

技术分享图片

(2)字符长度与字节长度:

技术分享图片
结果:

技术分享图片

技术分享图片
结果:

技术分享图片

(3)instr(@username,’民’):查找某个字符在字符串中的位置,如果找到返回此字符的索引,如果没有找到返回0
例:

技术分享图片

显示结果:

技术分享图片

(4)Lpad(@username,10,’要填充的字符’)左填充:将字符串按照指定的长度填充到原字符串的左边

技术分享图片

显示结果:

技术分享图片

(5)Rpad右填充

技术分享图片

显示结果:

技术分享图片

(6)insert 替换字符串
例:从第二个字符开始替换两个字符,替换成‘呵呵’

技术分享图片

显示结果:

技术分享图片

(7)strcmp(字符串1,字符串2)比较两个字符串的大小,按照字典顺序去比较
例:

技术分享图片

显示结果:

技术分享图片

技术分享图片

2.自定义函数:(包括 函数名 函数参数 返回值 函数体(作用域))

(1)创建函数的语法:

技术分享图片

例:
创建简单函数:

技术分享图片

调用简单函数:

技术分享图片

显示结果:

技术分享图片

(2)函数基本语法:
-- 查看所有函数 show functions status;
-- 查看创建函数 show create function test;
-- 删除函数 drop function test;
例:
查看所有函数:

技术分享图片

显示结果:

技术分享图片

(3)复合结构定义语法:
在函数体中,如果包含多条语句,我们需要把多条语句放到BEGIN........END语句块中
例:
创建函数:

技术分享图片

函数创建成功,调用函数:

技术分享图片

显示结果:

技术分享图片

四.MySQL数据库中常见的时间函数
1.常见日期函数:

技术分享图片

服务器三种时区设置:
(1)系统时区---保存在系统变量system_time_zone
(2)服务器时区---保存在全局系统变量global.time_zone
(3)每个客户端连接的时区---保存在会话变量session.time_zone
注意:客户端时区的设置会影响一些日期函数返回值的显示,例如:now()、curtime()、curdate(),也影响timestamp列值的显示。
默认情况下,客户端和服务器的时区相同,其值为SYSTEM,表示使用系统时区。

技术分享图片

2.返回服务器当前时间:now([fsp]);返回服务器当前时间和日期,fsp是指到秒的精确度,取值0~6
例:

技术分享图片

(1)now()的显示格式是:‘YYYY-MM-DD HH:MM:SS’
例:

技术分享图片

(2)now()+0的显示格式是:‘YYYYMMDDHHMMSS’
例:

技术分享图片

注意:sysdate()返回服务器当前时间和日期,与now()的不同点在于:@2.now()返回的是语句执行的时间

技术分享图片

比之下图时间:

技术分享图片

3.时间日期计算函数:分别为给定的时间日期加上(add)或减去(sub)一个时间间隔值(expr)
格式:

技术分享图片

(1)interval是时间间隔的关键字
(2)Expr是一个表达式,对应后面的类型
(3)Unit是时间间隔的单位(间隔类型)(20个),如下:

技术分享图片

技术分享图片

例1:(当前时间加一天)

技术分享图片

例2:(减一天一时一分一秒)

技术分享图片

4.个性化显示日期:

(1)dayofweek(date); -- 一周中的第几天

技术分享图片

(2)Dayofmonth(data); -- 一个中的第几天

技术分享图片

(3)Dayofuyear(date) -- 一年中的第几天

技术分享图片

                        【本次总结完毕】

本类排行

今日推荐

热门手游