>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
视图是指从一个或者多个表中导出来的数据,是一种虚拟存在的表。视图就像一个窗口,通过这个窗口可以看到系统专门提供的数据,这样用户就可以不用看到整个数据而只关心对自己有用的数据。
数据库中只存放了视图的定义,而没有存放视图中的数据,这些数据存放在原来的表中。
使用视图查询数据时,数据库会从原来的表中取出对应的数据。
视图中的数据依赖于原来表中的数据,一旦表中的数据发生改变,显示在视图中的数据也会随之发生改变。
视图的作用:保障数据的安全,提高查询效率
创建视图
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