第一章第七节 SQL的使用(七)存储过程与事务处理
存储过程
由于一些复杂的操作无法通过一条SQL语句解决,每次处理这些操作都需要多条SQL语句;为此,可以创建存储过程:为以后的使用而保存的多条SQL语句的集合。
存储过程有下面这些好处。
创建存储过程的格式如下。
1 | CREATE PROCEDURE 存储过程名 (参数列表) |
其中,参数列表的形式为:[IN|OUT|INOUT] param_name type
例如
1 | DELIMITER $ |
其中,为了正确定义存储过程,因而不能让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 | START TRANSACTION; |
所有的SQL语句完成的结果就是cust_id=’1000000006’所在行被删除,而cust_id=’1000000005’所在行的cust_email不变。