mysql高级-视图和函数

三. 视图与函数

1.视图

  1. 视图简介
    • MySQL 视图是一个虚拟表,其内容由查询定义。
    • 视图包含一系列带有名称的列和行数据。
    • 视图并不在数据库中以存储的数据值集形式存在。行和列数据来自由定义视图的查询所引用的表。
    1. 优点:
      1. 简单化,数据所见即所得;
      2. 安全性,用户只能查询或修改他们所能见到得到的数据;
      3. 逻辑独立性,可以屏蔽真实表结构变化带来的影响。
    2. 缺点:
      1. 性能相对较差,从视图查询数据可能会很慢,特别是如果视图是基于其他视图创建的;
      2. 修改不方便,特别是复杂的聚合视图基本无法修改
  2. 视图使用
    2.1单表使用创建视图
    -- 创建视图 
    create view view1(名字,性别,年龄) 
    as select stuname,Gender,age
    from stuinfo; 
    -- 通过视图查询 
    select * from view1;
    2.2多表链接查询视图
    ```mysql
    -- 多表查询视图
    -- create view 自定义名称 
    -- as 链接查询
    create view view3 
    as select stuname,Gender,age,classname 
    from stuinfo s inner join class c 
    on s.classid = c.ClassID;
    -- 通过视图查询 
    select * from view3;
    

2.3视图更新数据

  1. 可以使用 DELETE 语句通过视图删除底层表的行
  2. 创建可更行视图:定义视图的 SELECT 语句不能包含以下任何元素
    • 聚合函数;
    • distinct 子句;
    • group by 子句;
    • having 子句;
    • union 和 union all 子句;
    • 外连接
    -- 以创建的view1 
    -- 视图字段别名进行修改没有设置别名的无关
    update view1 set age = age + 1; 
    
  3. WITH CHECK OPTION 子句
    更新或添加,可看见的数据或者满足条件的数据
-- 创建视图无WITH CHECK OPTION 
create view view4
as select * from course where TNO> 200;
-- 查询
SELECT * FROM VIEW4
-- 可以添加
INSERT INTO VIEW4 VALUES('6-666','java基础',200);
-- 修改视图
alter view view4 
as select * from course where TNO>200 with check option;
-- 无法添加不满足条件
INSERT INTO VIEW4 VALUES('6-656','java开发',190);
  1. 视图管
    3.1查看视图 view1 的定义
    show create view view1;
    3.2视图与表一样
    ```mysql
    show tables --查询表与视图 
    3.2删除视图
    ```mysql
    drop view 视图名
    

2.函数

  1. 函数简介
    • MySQL 中的函数和 JavaScript 中的函数作用类似,就是执行特定任务的代码块。
  2. 函数与过程的区别
    • 函数名后面有一对小括号,括号内可以填写或不填参数,但括号不能省略;
    • 小括号后必须跟 returns,returns 后跟返回值类型,类型必须是 MySQL 中的类型;
    • 函数主体放在 begin…end 内,end 前要 return 与前面 returns 后跟的类型相同的值;
    • select 查询结果也可以用来给变量赋值,但是需要用 into 关键词。
  3. 函数使用
    创建函数
    -- 语句
    create function 函数名([参数列表]) returns 数据类型 
    begin 
    sql 语句; 
    return 值; 
    end;
    ```MySQL
    -- 应用
    CREATE FUNCTION myfun(sid VARCHAR(20)) RETURNs varchar(20)
    BEGIN 
    -- 定义返回值
    DECLARE name VARCHAR(20);
    -- SQL 关键字:into 返回值
    SELECT cityName INTO name FROM city WHERE id=sid;
    -- 返回
    RETURN name;
    END
    -- 使用函数
    SELECT myfun('1');
    
    

3、函数与过程的区别
函数和过程统称为存储在数据库中的实现特定功能的代码块,但是它们之间也有一些区别:
 返回值不同:函数必须有返回值,且仅返回一个结果值;过程可以没有返回值,但是能返回结果集;
 调用时的不同:函数使用 select 进行调用;过程使用 call 进行调用;
 参数的不同:函数的参数都是 in 参数;过程可以传递 in\out\inout 参数。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值