MySQL的存储过程蛮啰嗦的,与MSSQL或者Oracle的存储过程相比,如果没有显式指定,他会隐含地指定一系列特性(characteristic)的默认值来创建存储过程

通常在使用图形界面工具进行存储过程编写的时候,图形界面工具会自动加上这部分内容比,

如用HeidiSQL创建存储过程的时候,会自动生成这些特性(characteristic)的默认值。

但是这些特性究竟是干啥的,有什么影响,一直没有怎么弄清楚。

LANGUAGE SQL

存储过程语言,默认是sql,说明存储过程中使用的是sql语言编写的,暂时只支持sql,后续可能会支持其他语言

NOT DETERMINISTIC

是否确定性的输入就是确定性的输出,默认是NOT DETERMINISTIC,只对于同样的输入,输出也是一样的,当前这个值还没有使用

CONTAINS SQL

提供子程序使用数据的内在信息,这些特征值目前提供给服务器,并没有根据这些特征值来约束过程实际使用数据的情况,说白了就是没有使用的

包括以下四种选择

1.CONTAINS SQL表示子程序不包含读或者写数据的语句

2.NO SQL 表示子程序不包含sql

3.READS SQL DATA 表示子程序包含读数据的语句,但是不包含写数据的语句

4.MODIFIES SQL DATA 表示子程序包含写数据的语句。

SQL SECURITY DEFINER

用来指定存储过程是使用创建者的许可来执行,还是执行者的许可来执行,默认值是DEFINER

DEFINER 创建者的身份来调用,对于当前用户来说:如果执行存储过程的权限,且创建者有访问表的权限,当前用户可以成功执行过程的调用的

说白了就是当前用户调用存储过程,存储过程执行的具体操作是借助定义存储过程的user的权限执行的。

INVOKER 调用者的身份来执行,对于当前用户来说:如果执行存储过程的权限,以当前身份去访问表,如果当前身份没有访问表的权限,即便是有执行过程的权限,仍然是无法成功执行过程的调用的。

说白了就是当前用户调用存储过程,只有当前用户有执行存储过程中涉及的对象的操作的权限的时候,才能成功执行。

COMMENT ''

存储过程的注释性信息写在COMMENT里面,这里只能是单行文本,多行文本会被移除到回车换行等,一个字:扯

为什么说这个扯淡呢?

通常情况下,楼主会注释一个调用存储过程的示例在备注里,以免自己活着别人在调试的时候,参数很多的时候,可以很快调用起来,麻烦写半天参数之类的

-- 因此就会存在类似如下的注释,但是注释中的语句会被全部保存成一行,格式给抹掉了

/*

set @p_parameter1 = 'abc';

set @p_parameter2 = 200;

call mysql_procedure(@p_parameyter1,@p_parameter2)

*/

以下是一个存储过程的demo,delimiter 仅仅是让存储过程知道,遇到delimiter定义的字符的时候是结束的标记。

话说MySQL不支持匿名块就算了,定义存储过程的时候,什么时候结束他自己都解析不出来?

delimiter KKKKKKKK(当然是fuck也行)

CREATE DEFINER=`root`@`%` PROCEDURE `porcedureName`(in p_parameter1 varchar(200),in p_parameter2 int,out p_outparameter int)

-- 存储过程语言,默认是sql,说明存储过程中使用的是sql语言编写的,暂时只支持sql,后续可能会支持其他语言

LANGUAGE SQL

-- 是否确定性的输入就是确定性的输出,默认是NOT DETERMINISTIC,只对于同样的输入,输出也是一样的,当前这个值还没有使用

NOT DETERMINISTIC

-- 提供子程序使用数据的内在信息,这些特征值目前提供给服务器,并没有根据这些特征值来约束过程实际使用数据的情况,说白了就是没有使用的

-- ONTAINS SQL表示子程序不包含读或者写数据的语句

-- NO SQL 表示子程序不包含sql

-- READS SQL DATA 表示子程序包含读数据的语句,但是不包含写数据的语句

-- MODIFIES SQL DATA 表示子程序包含写数据的语句

CONTAINS SQL

-- 用来指定存储过程是使用创建者的许可来执行,还是执行者的许可来执行,默认值是DEFINER

-- DEFINER 创建者的身份来调用,如果创建者有权限访问存储过程中的表,调用者有执行过程的权限,就可以执行

-- INVOKER 调用者的身份来执行,取决于调用是否有执行过程+执行过程中sql语句对应的权限

SQL SECURITY DEFINER

-- 存储过程的注释性信息写在COMMENT里面,这里只能是单行文本,多行文本会被移除到回车换行等,一个字:扯

-- 为什么说这个扯淡呢?

-- 通常情况下,楼主会注释一个调用存储过程的示例在备注里,以免自己活着别人在调试的时候,参数很多的时候,调用起来,麻烦写半天参数之类的

-- 因此就会存在类似如下的注释,但是注释中的语句会被全部保存成一行,格式给抹掉了

/*

set @p_parameter1 = 'abc';

set @p_parameter2 = 200;

call mysql_procedure(@p_parameyter1,@p_parameter2)

*/

COMMENT ''

begin

select * from user where id = 100;

end

KKKKKKKK(delimiter是fuck的话,这里就是fuck了,结尾的标记而已)

mysql 匿名块_MySQL存储过程定义中的特性(characteristic)的含义相关推荐

  1. mysql存储过程含义_MySQL存储过程定义中的特性(characteristic)的含义

    MySQL的存储过程蛮啰嗦的,与MSSQL或者Oracle的存储过程相比,如果没有显式指定,他会隐含地指定一系列特性(characteristic)的默认值来创建存储过程 通常在使用图形界面工具进行存 ...

  2. mysql存储过程含义,MySQL存储过程定义中的特性(characteristic)的含义

    存储过程语言,默认是sql,说明存储过程中使用的是sql语言编写的,暂时只支持sql,后续可能会支持其他语言 NOT DETERMINISTIC 是否确定性的输入就是确定性的输出,默认是NOT DET ...

  3. mysql characteristic_MySQL存储过程定义中的特性(characteristic)的含义

    MySQL的存储过程蛮啰嗦的,与MSSQL或者Oracle的存储过程相比,如果没有显式指定,他会隐含地指定一系列特性(characteristic)的默认值来创建存储过程 通常在使用图形界面工具进行存 ...

  4. mysql存储过程在实际开发中怎么用_MYSQL存储过程开发中怎么使用游标嵌套

    mysql存储过程开发中如何使用游标嵌套 在实际业务逻辑开发中,难免用到游标嵌套,举例如下: delimiter // drop procedure if exists good_nested_cur ...

  5. 【PL/SQL】匿名块、存储过程、函数、触发器

    名词解释 子程序:PL/SQL的过程和函数统称为子程序. 匿名块:以DECLARE或BEGIN开始,每次提交都被编译.匿名块因为没有名称,所以不能在数据库中存储并且不能直接从其他PL/SQL块中调用. ...

  6. mysql 局域网存储_MySQL 存储过程

    修改定界符 DELIMITER $$ 创建存储过程 CREATE [DEFINER = {user | CURRENT_USER}]    --当前用户,如果省略就是默认用户 PROCEDURE sp ...

  7. php mysql 变量赋值_mysql存储过程中变量的定义赋值操作

    一.变量的定义 mysql中变量定义用declare来定义一局部变量,该变量的使用范围只能在begin...end 块中使用,变量必须定义在复合语句的开头,并且是在其它语句之前,也可以同时申明多个变量 ...

  8. mysql 函数 局部变量_MySQL 存储过程 存储函数 局部变量 游标 概念示例

    一个存储过程是一个可编程的函数,它可以在MySQL中创建并保存.它是由一些SQL语句和一些特殊的控制结构语句组成. 当希望在不同的应用程序或平台上执行相同的函数,或者封装特定的功能时,存储过程是一个非 ...

  9. mysql 热块_mysql 优化

    数据库层面:应用系统层面优化SQL优化 SQL优化一般通过分析慢查询日志来抓取长事务高消耗的sql,通过结合具体业务,对sql逻辑进行分析and精简,or重写sql.通过配置slow_query_lo ...

最新文章

  1. php的环境怎么配置文件,php环境下所有的配置文件以及作用
  2. 问题集锦(52-53)
  3. android 访问https服务器
  4. ​“免疫杀手” Deep X-RAY
  5. 输入列画表格 在图形环境中很容易做出漂亮的表格。但在控制台环境中就比较困难了。 有的时候可以用一些符号大略地模拟:(word文档中可能不整齐,拷贝到记事本中看)...
  6. Linux 市场估值将超 70 亿美元,主要原因是安全与开源需求
  7. 极光笔记丨搭建UMS私有云文件服务器
  8. c语言转换成delphi程序语言
  9. 【MUI框架】学习笔记整理 Day 2
  10. SQL Server 2019的下载与安装
  11. 解决STM32虚拟U盘枚举过慢的问题
  12. HTML5在vivo手机适配问题
  13. 关于cookie的跨域(一级域)
  14. HDI板和盲埋孔电路板的区别
  15. 纯Java搭建SS开发环境
  16. 可视化神器Plotly绘制热力图
  17. java枚举类是怎么初始化的,为什么说枚举类是线程安全的
  18. Jest 里配置 babelrc,支持import导入
  19. Spring注入:配置注入(set注入和构造器注入)与注解注入
  20. vs中如何对布局、代码进行快速标准格式排版

热门文章

  1. jmeter线程数并发数区别_如何确定Kafka的分区数、key和consumer线程数、以及不消费问题解决...
  2. 光端机和收发器的区别有哪些?
  3. 21秋期末考试建筑力学与结构10126k2
  4. 【渝粤教育】21秋期末考试个人与团队管理10257k2
  5. [渝粤教育] 中国地质大学 金融保险业会计 复习题 (2)
  6. AX5243与AX5043方案对比及应用设计
  7. Probability(概率) vs Likelihood(似然)
  8. 计算机模拟技术在教学上的应用,计算机模拟技术在水利工程学科试验教学中的应用...
  9. mysql timeout的单位_mysql的timeout-阿里云开发者社区
  10. Windows编程之网络之邮件槽通讯