sql必知必会(第五版)学习总结(三)--mysql的视图,存储过程,事务处理,游标,触发器总结

目录

一:视图

1.1使用视图的优点:

1.2.创建视图

二:存储过程

2.1存储过程的优点:

2.2 创建存储过程

2.3 执行存储过程

2.4 删除存储过程

2.5 检查存储过程

2.6 展示存储过程的结果

三: 游标

四 事务处理

4.1 事务处理的作用:

4.2 事务处理的几道术语

 五 触发器


一:视图

1.1使用视图的优点:

  • 重用SQL语句。
  • 简化复杂的SQL操作。在编写查询后,可以方便地重用它而不必知道它的基本查询细节。
  • 使用表的组成部分而不是整个表。
  • 保护数据。可以给用户授予表的特定部分的访问权限而不是整个表的访问权限。
  • 更改数据格式和表示。视图可返回与底层表的表示和格式不同的数据。
  • 利用视图简化复杂的联结

【注意】:

1)创建视图函数后,可以用与表相同的方式利用他们,可以进行SELECT执行操作,过滤,排序数据 将视图结合其他的视图或表,甚至能添加和更新数据。

2) 知道视图仅仅是用来查看跟存储在别处的数据,本身不包含数据,数据是从其他表检索出来, 更改与添加表中的数据时,视图将返回改变的数据。

3)通常,应该将视图用于检索( SELECT 语句) 而不用于更新(INSERT , UPDATE,DELETE )。

1.2.创建视图

CREATE VIEW 语句来创建视图。删除视图用 DROP VIEW viewname;

CREATE VIEW ProductCustomers 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;

检索 ProductCustomers表的数据

SELECT cust_name, cust_contact
FROM ProductCustomers
WHERE prod_id = 'RGAN01';

使用视图重新格式化检索的数据

SELECT CONCAT(vend_name, ' (', vend_country, ')') 
AS vend_title 
FROM Vendors
ORDER BY vend_name;

使用视图过滤数据

CREATE VIEW CustomerEMAIList AS
SELECT cust_id, cust_name, cust_email
FROM Customers
WHERE cust_email IS NOT NULL;

二:存储过程

2.1存储过程的优点:

存储过程是为了以后的使用而保存的一条或多条MySQL语句的集合,

使用存储过程主要有3个好处: 简单、安全、高性能 

1)通过把处理封装在容易使用的单元中,简化复杂的操作;

2)防止错误,由于不要求反复建立一系列处理步骤,这保证了数据的完整性;

3)简化对变动的管理。如果表名、列名或业务逻辑等有变化,只需要更改存储过程的代码,使用它的人员甚至不需知道这些变化;

4)提高性能,使用存储过程比使用单独的 SQL 语句要快。

使用存储过程也存在一些缺点:

首先,一般来说,存储过程的编写比基本SQL语句复杂,编写存储过程需要更高的技能,

更丰富的经验。另外,需要限制存储过程的创建权限,允许用户使用存储过程,但不允许他们创建存储过程。

2.2 创建存储过程

create procedure productpricing(
        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;

2.3 执行存储过程

CALL productpricing(@pricelow, @pricehigh, @priceaverage);

2.4 删除存储过程

drop procedure productpricing;

2.5 检查存储过程

show create procedure productpricing

2.6 展示存储过程的结果

show @priceaverage;

三: 游标

3.1游标的定义:

是一个存储在MySQL服务器上的数据库查询,它不是一条SELECT语句

而是被该语句检索出来的结果集。在存储了游标之后,应用程序可以根据需要滚动或浏览其中的数据。

它主要用于交互式应用,其中用户需要滚动屏幕上的数据,并对数据进行浏览或做出更改。

3.2使用游标

(1)在能够使用游标前,必须声明它,这个过程实际上没有检索数据,

只是定义要使用的SELECT语句。游标用DECLARE语句创建,如:

create procedure processorders()
begin
DECLARE ordernumbers cursor
for
select order_num from orders;
end;

(2)打开游标

open ordernumbers;

(3)对于填有数据的游标,根据需要取出(检索)各行

    需要用fetch检索当前行的order_num列到一个名为o的局部声明的变量中

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;

(4)在结束游标使用时,必须关闭游标。

close ordernumbers;

四 事务处理

4.1 事务处理的作用:

  可以用来维护数据的完整性,保证SQL的操作要么完全执行,要么完全不执行,如果发生错误就进行撤销。

  • 保证数据的完整性。
  • 保证数据不受外影响。

4.2 事务处理的几道术语

  • 事务(transaction) 一组SQL语句
  • 退回(rollback)撤销执行SQL语句的过程
  • 提交(commit) 将为执行的SQL语句写入数据库表
  • 保留点(savepoint) 临时存储点,用于发布退回

 五 触发器

   触发器是特殊的存储过程,它在特定的数据库活动发生时自动执行。

触发器可以与特定表上面的insert, update , delete操作相关联

与存储过程不一样,存储过程只是简单的存储sql语句,触发器与单个的表相关联。

触发器可以在特定执行操作之前或之后执行

猜你喜欢

转载自blog.csdn.net/yezonghui/article/details/113036409