一、视图
视图常见的应用:
》重用SQL语句;
》简化复杂的SQL操作;
》保护数据,可以给用户特定部分的权限而不是整个表的权限;
》更改数据格式和表示,视图可返回和底层表格式不同的数据;
》使用表的部分数据而不是整个表;
在视图创建后,可以用表的基本操作来使用视图,进行SELECT,WHERE,ORDER BY,联结等操作。视图仅仅是用来查看存储在别处的数据的一种工具而不是一个表,本身存储数据。
创建一个视图:
CREATE VIEW productcustomers AS SELECT cust_name,cust_contact,prod_id FROM customers,orders,orderitems WHERE customers.cust_id=orderitems.cust_id AND orderitems.order_num=orders.order_num;
使用视图:
SELECT * FROM productcustomers WHERE prod_id='TNT2';
删除视图:
DROP VIEW viewname;
二、存储过程
存储过程实际上是一种函数。使用存储过程有三个主要的好处:简单,安全,高性能。
创建存储过程:
DELIMITER //
CREATE PROCEDURE productpricing()
BEGIN
SELECT Avg(prod_price) AS priceaverage FROM products;
END //
DELIMITER;
因为在mysql中使用;作为语句分割符,所有临时使用DELIMITER //来更改。
使用存储过程:
CALL productpricing();
删除存储过程:
DROP PROCEDURE productpricing();
在存储过程中使用参数:
CREATE PROCEDURE ordertotal(
IN onumber INT,OUT otoal DECIMAL(8,2)
)
BEGIN
SELECT Sum(item_price*quantity) FROM orderitems WHERE order_num=onumber INTO ototal;
END
使用上面的存储过程:
CALL ordertotal(2000,@total)
三、触发器
触发器的作用是需要在某个表发生更改时自动处理。
触发器时MySQL响应下面语句而自动执行的SQL语句:DELETE,INSERT,UPDATE.
创建触发器:
CREATE TRIGGER newproduct AFTER INSERT ON products
FOR EACH ROW SELECT 'Product added';
删除触发器:
DROP TRIGGER newproduct;
触发器不能更或覆盖,为了修改一个触发器,必须先删除再重新创建。
CREATE TRIGGER neworder AFTER INSERT ON orders
FOR EACH ROW SELECT NEW.order_num;
创建了一个neworder的触发器。在插入一个新订单后,mysql生成了一个新订单号并保存到order_num中。触发器从NEW.order_num中取得值并返还。