西安数据恢复中心
首页 | 联系方式 | 加入收藏 | 设为首页

服务项目

站内搜索

联系方式

办公地址:西安市未央区未央路130号(市图书馆旁)
联系电话: 18091827330

当前位置:主页 > 硬盘维修资料 > 正文

MySQL对存储子程序和触发程序的限制

编辑::西安硬盘维修中心-硬盘修复厂家-移动硬盘维修-西安硬盘修复公司  更新时间:2018-01-24  字号:
摘要:这里介绍的某些限制适用于所有的存储子程序,即存储程序和存储函数。某些限制仅适用于存储函数而不是存储程序。 对存储函数的的所有限制也适用于触发程序。 注释: 如果SQL语句

这里介绍的某些限制适用于所有的存储子程序,即存储程序和存储函数。某些限制仅适用于存储函数而不是存储程序。

对存储函数的的所有限制也适用于触发程序。

注释:如果SQL语句,如SELECT ... INTO语句包含具有相同名称的对列的引用以及声明的局部变量,MySQL会将引用解释为变量的名称。这是一种非标准的行为,优先顺序通常是列名、然后是SQL变量和参数。

存储子程序不能包含任意SQL语句。在存储子程序中,禁止使用下述语句:

·         CHECK TABLES

·         LOCK TABLES, UNLOCK TABLES

·         LOAD DATA, LOAD TABLE

·         SQL预处理语句(PREPARE、EXECUTE、DEALLOCATE PREPARE)。隐含意义:不能在存储子程序中使用动态SQL语句(其中,能够以字符串形式构造动态语句,然后执行它们)。从MySQL 5.0.13开始,对于存储程序放宽了该限制,但该限制仍适用于存储函数和触发程序。

·         OPTIMIZE TABLE

对于存储函数(而不是存储程序),禁止下述额外语句:

·         执行显式或隐式提交或回滚操作的语句。

·         返回结果集的语句。包括没有INFO子句的SELECT语句,以及SHOW语句。能够用SELECT … INTO,或使用光标和FETCH语句处理结果集的函数。

·         FLUSH语句。注意,尽管能够在存储程序中使用FLUSH,但不能从存储函数或触发程序调用这类存储程序。

注意,尽管某些限制在正常情况下适用于存储函数和触发程序,不适用于存储程序,如果它们是从存储函数或触发程序中调用的,这些限制也适用于存储程序。

使用存储子程序会导致复制问题。关于这方面的进一步讨论,

INFORMATION_SCHEMA尚不包含PARAMETERS表,因此,对于需要在运行时获取子程序参数信息的应用程序来说,必须采用相应的规避错误,如解析SHOW CREATE语句的输出。

没有存储子程序调试工具。

存储子程序使用了具体化的光标,而不是固有光标(在服务器端生成结果集并对结果集进行高速缓冲处理,然后在客户端获取结果集时按行返回)。

不能提前处理CALL语句。无论是对服务器端预处理语句还是SQL预处理语句,均成立。

为了防止服务器线程间的交互问题,当客户端发出语句时,服务器将使用可用的、用于语句执行的子程序和触发程序快照。也就是说,服务器将计算出可在语句执行期间使用的存储程序、函数和触发程序的列表,加载它们,然后进入语句执行。这意味着,在语句执行的同时,它不会看到其他线程对子程序所作的变更。

上一篇:对服务器端光标的限制

下一篇:在系统处于睡眠状态时访问自加密驱动器上的数

分享到: