存储过程 与 事务管理
来源:互联网 发布:saber软件芯片tl494 编辑:程序博客网 时间:2024/05/22 00:46
存储过程就是为以后使用所保存的一条或是多条SQL语句,类似批处理,虽然其作用不仅仅在于批处理。
使用原因:
1. 通过把处理封装在一个易用得到单元里,可以简化复杂的操作;
2. 简化对变动的管理,如果表名、列名或是业务逻辑有变化,那么只需要改变存储过程的代码,使用它的人甚至不需要知道这些变化;
3. 存储过程通常以编译过得形式存在,提高速度;
首先,执行存储过程比编写频繁,用EXCUTE来执行。
EXCUTE AddNewProduct('JTS01', 'Stuffed Eiffel Tower', 6.49, 'Plush sthffed toy with the text La Tour Eiffel in red white and blue');
存储过程完成的工作有:
1. 验证传递的数据,保证所有的4个参数都有值;
2. 生成用作主键的ID;
3. 将新产品加到Products表中。
对具体的DBMS来说,可能包括以下的执行选择:
1. 参数可选,具有不提供参数时的默认值;
2. 不按次序给出参数,以“参数=值”的方式给出;
3. 输出参数,允许存储过程在正在执行的应用程序中更新所用的参数;
4. 用SELECT检索数据;
5. 返回代码,允许存储过程返回一个值到正在运行的应用程序
创建存储过程:
--对邮件发送清单中具有邮件地址的过程进行计数CREATE PROCEDURE MailingListCount( ListCount OUT INTEGER)IS v_rows INTEGER;BEGIN SELECT COUNT(*) INTO v_rows FROM Customers WHERE NOT cust_email IS NULL; ListCount := v_rows;END;
这个存储过程有一个名为ListCount的参数,此参数从存储过程返回一个值,IN、OUT表示这个是传递值还是返回值,调用如下:
var ReturnValue NUMBEREXEC MailingListCount(:ReturnValue);SELECT ReturnValue;
事务处理
关系数据库把数据存储在多个表中,使数据更容易操作、维护和重用。例如Orders和OrderItems两个表,Orders存储实际的订单,OrderItems存储订购的各项物品。
所以给系统添加订单的过程如下:
1. 检查数据库中是否存在相应的顾客,如果不存在,添加;
2. 检索顾客ID;
3. 在Orders表中添加一行,他与顾客ID相关联;
4. 检索Orders表中赋予的新订单ID;
5. 未订购的每个物品在OrderItems中添加一行,通过检索出来的ID把他与Orders表关联(并且通过产品ID与Products表关联)
事务处理的几个术语:
1. 事务(transaction)值一组SQL语句;
2. 回退(rollback)指撤销指定的SQL语句的过程;
3. 提交(commit)指将未存储的SQL语句结果写入数据表;
4. 保留点(savepoint)指事务处理中设置的临时占位符(placeholder)可以对它发布回退(与回退整个事务处理不同);
事务处理可以管理UPDATE DELETE INSERT 语句,不能回退SELECT,也没有必要,也不能回退CREATE DROP操作。
使用事务处理可以管理成批执行的SQL操作,保证数据库不包含不完整的操作结果。利用事务处理,可以保证一组操作不会中途停止,它们要么完全执行,要么完全不执行。
#MySQL&&MariaDB 设置事务,提交START TRANSACTION......COMMIT;#创建占位符(保留点)SAVEPOINT delete1;#回退全部ROLLBACK;#回退到某个占位符ROLLBACK TO delete1;
保留点越多越好
游标
SQL检索返回的是一个结果集,使用游标可以查看前一行或者后一行,不过游标(cursor)只能在存储过程中使用。
游标主要用于交互式应用,其中用户需要滚动屏幕中的数据,并对数据进行浏览或作出修改。
使用游标涉及几个明确地步骤:
- 使用前,必须声明
- 一旦声明,就必须打开游标以供使用。使用这个过程用前面定义的SELECT语句把实际数据检索出来。
- 对于填有数据的游标,根据需要取出各行
- 在结束游标使用时,必须关闭游标,可能的话,释放游标。
--创建游标CREATE CustCursor CURSORFOR SELECT * FROM CustomersWHERE cust_mail IS NULL;--使用游标OPEN CURSOR CustCursor;--使用FETCH访问游标数据,FETCH指出要检索哪些行FETCH NEXT FROM CustCursor INTO .....--关闭游标CLOST CustCursor;
- 存储过程 与 事务管理
- MySQL数据库事务管理与存储过程
- MySQL存储过程之事务管理
- MySQL存储过程之事务管理
- MySQL存储过程之事务管理
- MySQL存储过程之事务管理
- MySQL存储过程之事务管理
- MySQL存储过程之事务管理
- MySQL存储过程之事务管理
- MySQL存储过程之事务管理
- MySQL存储过程之事务管理
- MySQL存储过程之事务管理
- mysql存储过程事务管理简析
- mysql存储过程事务管理简析
- mysql存储过程事务管理简析
- sql server存储过程的条件判断和事务管理
- mysql 存储过程(我自己写的第一个存储过程,支持事务管理)2
- 存储过程与存储关系
- 网站从http过度到https需要注意的几个小问题
- Java入门项目util
- Spring(一)——总体介绍
- Spring(二)——IoC
- POJ 1125 Stockbroker Grapevine
- 存储过程 与 事务管理
- 关于thinkphp中C方法的运用
- 两种计算器的实现方式
- 后台开发基础
- 【一步一步学习VBA】VBA获取单元格数值并弹窗显示
- CodeForces 702E Analysis of Pathes in Functional Graph(倍增)
- win8.1 创建 github.io
- fbxsdk 的 JNI 库
- Retrofit2 完全解析 探索与okhttp之间的关系