文章目录
  1. 存储过程
  2. 管理事务处理
    1. 标志事务处理
    2. 保留点

存储过程

由于一些复杂的操作无法通过一条SQL语句解决,每次处理这些操作都需要多条SQL语句;为此,可以创建存储过程:为以后的使用而保存的多条SQL语句的集合。

存储过程有下面这些好处。

 

创建存储过程的格式如下。

1
2
3
4
CREATE PROCEDURE  存储过程名 (参数列表)
BEGIN
SQL语句代码块
END

其中,参数列表的形式为:[IN|OUT|INOUT] param_name type

例如

1
2
3
4
5
6
7
DELIMITER $
CREATE PROCEDURE MailingListCount
(OUT ListCount INT)
BEGIN
SELECT COUNT(*) INTO ListCount FROM Customers
WHERE cust_email IS NOT NULL;
END $

其中,为了正确定义存储过程,因而不能让SQL语句在 ; 之后结束,因此需要重新定义结束符;这就是第一行的作用。

若需要在查询过程中对变量赋值,则使用SELECT语句。其他情况使用SET关键字为变量赋值,如SET num=10;

调用存储过程使用CALL关键字,类似于函数调用。

1
CALL MailingListCount(@ret) $

检验存储过程的值

1
SELECT @ret;

删除存储过程使用DROP PROCEDURE语句。

1
DROP PROCEDURE IF EXISTS MailingListCount;

管理事务处理

事务处理可用来维护数据库的完整性,它保证成批的SQL语句要么完全执行,要么完全不执行。

考察给系统添加订单这一过程。

 

如果在其中某一步停了下来,这时可能不会出错,也可能会出错。要避免这种错误,就需要使用事务处理。

例如,使用事务处理来给系统添加订单。

 

其中,事务指一组SQL语句,回退指撤销指定SQL语句的过程,提交指将未存储的SQL语句结果写入数据库表,保留点指事务处理中设置的临时占位符,可对其发布回退。

标志事务处理

START TRANSACTION标志事务处理的开始。若所有的SQL语句都正确执行,则执行COMMIT语句提交。此时这些SQL语句的结果才会写入磁盘。若发生意外,也可以使用ROLLBACK语句回退。这时整个事务被撤销。

保留点

有时发生错误只需要回退一部分即可,这就需要用到保留点。

保留点是放在合适位置的占位符,在需要时系统可回退到某个占位符。

创建保留点使用SAVEPOINT语句

1
SAVEPOINT deL1;

回退到保留点

1
ROLLBACK TO deL1;

综上,一个使用了保留点的事务处理

1
2
3
4
5
6
7
8
9
10
11
START TRANSACTION;

DELETE FROM Customers WHERE cust_id='1000000006';

SAVEPOINT deL1;

UPDATE Customers SET cust_email=NULL WHERE cust_id='1000000005';

ROLLBACK TO deL1;

COMMIT;

所有的SQL语句完成的结果就是cust_id=’1000000006’所在行被删除,而cust_id=’1000000005’所在行的cust_email不变。