MySQL视图,存储过程和触发器的使用

2019-07-03 17:27:04 浏览数 (1)

一、视图

视图常见的应用:

》重用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中取得值并返还。

0 人点赞