mysql 视图和函数区别是什么_MySQL视图和自定义函数

>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

视图是指从一个或者多个表中导出来的数据,是一种虚拟存在的表。视图就像一个窗口,通过这个窗口可以看到系统专门提供的数据,这样用户就可以不用看到整个数据而只关心对自己有用的数据。

数据库中只存放了视图的定义,而没有存放视图中的数据,这些数据存放在原来的表中。

使用视图查询数据时,数据库会从原来的表中取出对应的数据。

视图中的数据依赖于原来表中的数据,一旦表中的数据发生改变,显示在视图中的数据也会随之发生改变。

视图的作用:保障数据的安全,提高查询效率

创建视图

CREATE VIEW message AS

SELECT e.name,e.age,d.dept_name,e.married,e.gender FROM dept d JOIN employee e WHERE e.dept_id = d.dept_id;

修改视图

ALTER VIEW message AS

SELECT e.name,e.age,d.dept_name FROM dept d JOIN employee e WHERE e.dept_id = d.dept_id;

CREATE OR REPLACE VIEW message AS

SELECT e.name,e.age,d.dept_name,e.married,e.gender FROM dept d JOIN employee e WNERE e.dept_id = d.dept_id;

修改视图数据

INSERT INTO message values();

注:修改视图中的数据时,基本都是转换到基本表来更新(视图是一个虚拟表,其中没有数据)

虽然可以修改,但是有很多限制

一般情况下,最好将视图作为查询数据的虚拟表,而不要通过视图来更新数据。

删除视图

删除视图是指只会删除数据库中已经存在的视图,只删除视图的定义,不会删除表中的数据

DROP VIEW message;

或者判断视图是否存在并删除

DROP VIEW if exists message;

使用视图

SELECT * FROM message;

查看视图结构信息

DESCRIBE|DESC message;

>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

自定义函数(user-defined function UDF)是对MySQL功能的一个扩展

创建函数

函数体中可以使用复合结构、流程控制、SQL语句、变量定义等语法

使用SQL语句:

【例】

DELIMITER //

CREATE FUNCTION getStudent(sid INT)

RETURNS varchar(100)

BEGIN

RETURN (SELECT CONCAT(‘name:‘, name, ‘,score:‘,score) FROM student WHERE id = sid);

END//

DELIMITER ;

流程控制语句语法:

1.IF语句

search_condition参数表示条件判断语句

statement_list参数表示不同条件的执行语句

【例】

DELIMITER //

CREATE FUNCTION getLevel(userid INT)

RETURNS varchar(100)

BEGIN

DECLARE sscore INT;

DECLARE level TEXT DEFAULT ‘‘;

SELECT score FROM student WHERE id = userid INTO sscore;

IF sscore<60 THEN SET level = ‘不及格‘;

ELSEIF sscore>=60 THEN SET level = ‘及格‘;

END IF;

RETURN CONCAT(sscore,‘:‘,level);

END//

DELIMITER ;

2.CASE语句

case_value : 条件判断的变量

when_value : 变量的取值

statement_list : 不同when_value值得执行语句

search_condition : 条件判断语句

statement_list : 不同条件的执行语句

【例】

DELIMITER //

CREATE FUNCTION getLevel2(userid INT)

RETURNS varchar(100)

BEGIN

DECLARE sscore INT;

DECLARE level TEXT DEFAULT ‘‘;

SELECT score FROM student WHERE id = userid INTO sscore;

CASE

WHEN sscore>80 THEN SET level=‘优秀‘;

WHEN sscore>60 THEN SET level=‘良好‘;

ELSE SET level=‘不及格‘;

END CASE;

RETURN CONCAT(sscore,‘:‘,level);

END//

DELIMITER ;

3.LOOP语句

本身没有停止循环的语句

【例】

DELIMITER //

CREATE FUNCTION testLoop()

RETURNS INT

BEGIN

DECLARE count INT DEFAULT 0;

DECLARE sid INT DEFAULT 1;

addcount:LOOP

SET count = count + (SELECT score FROM student WHERE id = sid);

SET sid = sid + 1;

IF sid > 3 THEN LEAVE addcount;

END IF;

END LOOP addcount;

RETURN count;

END//

DELIMITER ;

4.LEAVE语句

用于跳出循环

LEAVE label

5.ITERATE语句

跳出当前循环,进入下一次循环

ITERATE label

6.REPEAT语句

有条件控制的循环语句,当满足条件时,跳出循环

【例】

DELIMITER //

CREATE FUNCTION testRepeat()

RETURNS INT

BEGIN

DECLARE count INT DEFAULT 0;

DECLARE sid INT DEFAULT 1;

REPEAT

SET count = count + (SELECT score FROM student WHERE id = sid);

SET sid = sid + 1;

UNTIL sid = 4

END REPEAT;

RETURN count;

END//

DELIMITER ;

7.WHILE语句

有条件控制的循环语句,当满足条件时,执行循环内的语句

【例】

DELIMITER //

CREATE FUNCTION testWhile()

RETURNS INT

BEGIN

DECLARE count INT DEFAULT 0;

DECLARE sid INT DEFAULT 1;

WHILE sid <= 3 DO

SET count = count + (SELECT score FROM student WHERE id = sid);

SET sid = sid + 1;

END WHILE;

RETURN count;

END//

DELIMITER ;

使用函数

SELECT getLevel(2);

删除函数

DROP FUNCTION getLevel;

【注意】

由于在BEGIN...END语句块中包含需要使用;结尾的语句,因此需要修改结束标识

DELIMITER // 修改默认的结束符";"为"//"

UDF可以没有参数,但是必须有且只有一个返回值

如果在函数体中包含多条语句,需要使用BEGIN...END语句块包含起来

MySQL视图和自定义函数

标签:case   sel   复合   条件判断   cti   跳出循环   变量   arch   转换

本条技术文章来源于互联网,如果无意侵犯您的权益请点击此处反馈版权投诉

本文系统来源:http://www.cnblogs.com/crisy0513/p/6373345.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值