22 使用视图
视图是虚拟的表,只包含使用时动态的检索数据的查询。
CREATE VIEW productcustomers AS
SELECT cust_name, cust_contact, pro_id
FROM customers,orders,orderitems
WHERE customers.cust_id = orders.cust_id
AND orderitems.order_num = orders.order_num;
将几个表格封装为一个视图,在使用时很方便
SELECT cust_name.cust_contact
FROM productcustomers
WHERE prod_id = 'TNT2';
更新视图将更新其基表。
23 存储
存储过程就是为以后的使用而保存的一条或者多条MYSOL语句的集合。可将其视为批文件。
MYSQL称存储过程的执行为调用。
执行名为productpricing的存储过程,计算并返回产品的最高最低和平均价格。
CALL productpricing(@pricelow,
@pricehigh,
@priceaverge);
创建存储过程
CREATE PROCEDURE productpricing()
BEGIN
SELECT Avg(prod_price) AS priceaverge
FROM products;
END;
删除存储过程
DROP PROCEDURE productpricing;
24 使用游标CURSOR
游标是一个一个存储在MYSQL服务器上的数据查询。它不是一条SELECT语句,而是被该语句检索出来的结果集。游标主要用于交互式应用。
创建游标 DECLARE 语句
DECLARE PROCEDURE processorders()
BEGIN
DECLARE ordernumbers CURSOR
FOR
SELECT order_num FROM orders;
END;
打开游标
OPEN orderumbers;
关闭游标
CLOSE ordernumbers;
使用游标数据FETCH
CREATE PROCEDURE processorders()
BEGIN
DECLARE o INT;
DECLARE ordernumbers CURSOR
FOR
SELECT order_num FROM orders;
OPEN ordernumbers;
FETCH ordernumbers INTO o;
CLOSE ordernumbers;
END;
循环检索数据
CREATE PROCEDURE processorders()
BEGIN
DECLARE done BOOLEAN DEFAULT 0;
DECLARE o INT;
DECLARE ordernumbers CURSOR
FOR
SELECT ordernumbers FROM orders;
DECLARE CONTINUE HANDLER FOR SQLSTATE '20000'SET done = 1;
OPEN ordernumbers;
REPEAT
FETCH ordernumbers INTO o;
UNTIL done END REPEAT;
CLOSE ordernumbers;
END;
25 使用触发器
在执行DELETE,INSERT,UPDATA时,自动执行的一条SQL语句。
创建触发器
CREATE TRIGGER newproduct AFTER INSERT ON products
FOR EACH ROW SELECT 'Product added';
删除触发器
DROP TRIGGER newproduct;