MySQL(四)
MySQL(四)
视图
视图是虚拟的表。与包含数据的表不一样,视图只包含使用时动态检索数据的查询。不包含表中应该有的任何列或数据,它包含的是一个SQL查询。
可以对视图执行SELECT操作,过滤和排序数据,将视图联结到其他视图或表,甚至能添加和更新数据
对视图增加或删除行,实际上是对其基表增加或删除行。
并非所有视图都是可更新的。
视图不能索引。
创建视图实例
CREATE VIEW product_customers AS
SELECT cust_name, cust_contact, prod_id
FROM customers, orders, orderitems
WHERE customers.cust_id = orders.cust_id
AND orderitems.order_num = orders. order_num ;
作用:重新格式化,过滤表中不想要的数据
存储过程
调用存储过程
CALL 存储过程名(参数1,
参数2
·
·
·);
创建存储过程
CREATE PROCEDURE 存储过程名([OUT 参数1 类型,
IN 参数2 类型···])
BEGIN
SELECT 字段
INTO 参数
FROM 表名;
其他操作
END;
删除存储过程
DROP PROCEDURE 存储过程名();
**注:**所有MySQL变量都必须以@开始。
以下是两个书上的实例:
-- 创建存储过程
-- 有三个输出参数
DELIMITER $$
CREATE
PROCEDURE `test`.`hhh`(OUT pl DECIMAL(8,2),
OUT ph DECIMAL(8,2),
OUT pa DECIMAL(8,2)
)
BEGIN
SELECT MIN(prod_price)
INTO pl
FROM products;
SELECT MAX(prod_price)
INTO ph
FROM products;
SELECT AVG(prod_price)
INTO pa
FROM products;
END$$
DELIMITER ;
------------------------------------------------
--调用存储过程
CALL hhh(@a, @b, @c); --将结果返回给abc桑变量,不过不会直接显示,需要SELECT查询。
--创建存储方法owo
--有两个参数,一个输入,一个输出
DELIMITER $$
CREATE
/*[DEFINER = { user | CURRENT_USER }]*/
PROCEDURE `test`.`owo`(
IN onumber INT,
OUT ototal DECIMAL(8,2)
)
BEGIN
SELECT SUM(item_price*quantity)
FROM oderitems
WHERE order_num = onumber
INTO ototal;
END$$
DELIMITER ;
--调用owo
CALL owo(20005, @total); --20005作为输出,@total接受输出
SELECT @total
还可以使用DECLARE,IF,THEN等完成更强大的存储过程。
待补
本文来自博客园,作者:klaus08,转载请注明原文链接:https://www.cnblogs.com/klaus08/p/15105011.html