视图VIEW
视图是虚拟的表,与数据库里的数据表不一样,视图只有每次调用时都会执行查询。视图仅仅是用来查看存储在别处的数据的一种设施。视图本身不包含数据,因此它们返回的数据是从其他表中检索出来的。
1、创建视图
CREATE VIEW 视图名 AS sql语句;
2、删除视图
DROP VIEW 视图名;
3、更新视图
ALTER VIEW 视图名 AS sql语句;
4、使用视图
SELECT * FROM 视图名;
5、示例
--创建视图v1
CREATE VIEW v1 AS SELECT* FROM users WHERE u_id > 10;--修改视图v1的sql语句
ALTER VIEW v1 AS SELECT* FROM users WHERE u_id > 5;--使用视图v1,进行分组排序限制等操作
SELECT age FROM v1 GROUP BY age ORDER BY age DESC LIMIT2 OFFSET 1;--删除视图v1
DROP VIEW v1;
示例
函数FUNCTION
在mysql中有很多内置函数,也可以自定义函数,自定义函数可以传入参数,也可以返回值,但是函数没办法得到执行语句得到的结果,存储过程可以。
1、创建函数
CREATE FUNCTION f1(
i1 INT,
i2 INT
)
RETURNS INT
BEGIN
DECLARE num INT;
SET num = i1 + i2;
RETURN (num);
END;
2、调用函数
SELECT f1(10,nid), username FROM tab1;
SELECT f1(10,20) INTO @1;
SELECT @1;
3、删除函数
DROP FUNCTION 函数名;
存储过程PROCEDURE
存储过程简单来说,就是为以后使用而保存的一条或多条MySQL语句的集合。
简单:通过把处理封装在容易使用的单元中,简化复杂的操作。如果表名、列名或业务逻辑(或别的内容)有变化,只需要更改存储过程的代码。使用它的人员甚至不需要知道这些变化。
安全:不要求反复建立一系列处理步骤,这保证了数据的完整性。
高性能:使用存储过程比使用单独的SQL语句要快。
1、创建存储过程
DELIMITER //
CREATE PROCEDURE 存储过程名 (参数)
BEGIN
sql语句1;
sql语句2;
...
END//
DELIMITER ;
-- 使用存储过程
CALL 存储过程名;
2、删除存储过程
DROP PROCEDURE 存储过程名;
DROP PROCEDURE IF EXISTS 存储过程名; -- 如果存在则删除
3、带参数的存储过程。
参数允许的数据类型与表中使用的数据类型相同;查询集不是允许的类型,因此不能通过一个参数返回多个行和列。
in 仅用于传入参数用
out 仅用于返回值用
inout 既可以传入又可以当作返回值
CREATE PROCEDURE p1 (
IN v1 INT,
OUT v2 INT,
INOUT v3 INT
)
BEGIN
DECLARE i INT;
DECLARE j INT DEFAULT 5;
SET i = 2;
SET v1 = i + v3;
SET v2 = v1 + j;
SELECT age INTO v3 from users WHERE u_id = 10; -- 将查询结果赋给v3
END;
-- 执行存储过程
SET @p1_v1 = 1;
SET @p1_v2 = 2;
SET @p1_v3 = 3;
CALL p1 (@p1_v1,@p1_v2,@p1_v3);
SELECT @p1_v1,@p1_v2,@p1_v3; -- p1_v1=1, p1_v2=10, p1_v3=28
4、条件判断
当in参数为1时,out返回'first',当in参数为2时,out返回'secon