目录
一:视图
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语句,触发器与单个的表相关联。
触发器可以在特定执行操作之前或之后执行。