1.视图
概念
视图是一个虚表,它是在表或者其他视图的基础上,使用SELECT语句来定义的。查询视图等效于查询定义他的那条语句,只是视图将细节隐藏了
定义语句
1.基本定义
CREATE VIEW view_nm AS SELECT —- FROM —-;
2.定义别名
CREATE VIEW view_nm(name1,name2…) AS SELECT xxxx,xxxx FROM xxxx;
2.存储程序
复合语句
以BEGIN开始,END结尾,中间可以包含任意数量的语句,语句之间用分号进行分割。
示例
CREATE PROCEDURE greetings()
BEGIN
DECLARE user CHAR(77) CHARACTER SET utf8;
SET user = (SELECT CURRENT_USER());
IF INSTR(user,'@') >0 THEN
SET user = SUBSTRING_INDEX(user,'@',1);
END IF;
IF user = '' THEN
SET user='earthling';
END IF;
SELECT CONCAT ('Greetings,',user,'!') AS greeting;
END;
--使用delimiter 重新定义mysql分隔符(分隔符不一定为单个字符)
delimiter $
CREATE PROCEDURE show_times()
BEGIN
SELECT CURRENT_TIMESTAMP AS 'Local Time';
SELECT UTC_TIMESTAMP AS 'UTC Ttime';
END $
delimiter;
CALL show_times();
存储函数和存储过程
存储函数常用于表达式中,他会执行计算并返回一个值,像COS()这样的内建函数
存储过程是使用CALL语句来调用的独立操作,不能用在表达式中
存储过程的使用情况:
1.只需要运算来实现某些效果或动作,不需要返回值。
2.运算结果需要多个结果集。
示例
CREATE FUNCTION func_name ([param_list])
RETURNS type
routine_stmt
CREATE PROCEDUCE proc_name([param_list])
routine_stmt
存储函数
--查询某一年出生总统的人数的函数
delimiter $
CREATE FUNCTION count_born_in_year(p_year INT)
RETURNS INT
READS SQL DATA
BEGIN
RETURN (SELECT COUNT(*) FROM president WHERE YEAR(birth)=p_year);
END$
delimiter ;
--调用方法
SELECT count_born_in_year(1999);
存储过程
--查询某一年出生总统的人数的存储过程
delimiter $
CREATE PROCEDURE show_born_in_year(p_year INT)
BEGIN
SELECT first_name,last_name,birth,death
FROM president
WHERE YEAR(birth)=p_year;
END$
delimiter ;
--使用方法
CALL count_born_in_year(1999);
存储过程和存储函数的区别
1.存储过程中没有RETURNS子句和任何RETURN语句
权限管理
创建存储过程和存储函数必须拥有数据库的 CREATE ROUTIME权限,如果当前用户没有权限,数据库将自动
触发器
事件
禁用和激活
ALTER EVENT XXXX DISABLE;
ALTER EVENT XXXX ENABLE;