和我一起迎接明天的太阳吧

klaus08

焦虑源于行动的匮乏

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等完成更强大的存储过程。

待补

posted @ 2021-07-07 20:17  klaus08  阅读(24)  评论(0编辑  收藏  举报