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

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

c741781c0214a4ed9b2a520c1d1802cc.png

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

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

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

27ade22509620b67c90c8091a5ec6e7c.png

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了,结尾的标记而已)

0b1331709591d260c1c78e86d0c51c18.png

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/351655.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Tomcat集群和Session共享的配置方法

Tomcat集群配置其实很简单,在Tomcat自带的文档中有详细的说明( /docs/cluster-howto.html ),只不过是英语的,对我这样的人来说很难懂 。 下面根据说下怎么配置吧: 第一步、准备工作: 准备几份Tomcat程序&#xff0c…

Python:GUI Tkinter

GUI编程 GUI编程(Graphical User Interface Programming)指的是用于创建图形用户界面的程序设计。这种界面采用图形方式显示信息,让用户可以通过图形化的方式与程序进行交互,而不是仅仅通过文本命令。GUI编程使得软件更加直观易用…

jenkins配置工程目录-启动case

1.我们在python里面编辑的脚本可以正常跑,但是在cmd里面跑就不行了,找不到自己定义的方法模块,这个时候我们要搞个环境变量 name : PYTHONPATH val : 工程目录路劲如: D:python\test 这个时候我们再次cmd运行发现可以运行了…

mrunit_使用MRUnit测试Hadoop程序

mrunit这篇文章将略微绕开使用MapReduce实现数据密集型处理中发现的模式,以讨论同样重要的测试。 汤姆•惠勒 ( Tom Wheeler)在纽约2012年Strata / Hadoop World会议上参加的一次演讲给了我部分启发。 当处理大型数据集时,想到的并…

mysql innodb flush method_对innodb_flush_method的一点解释

官方文档描述如下:By default, InnoDB uses the fsync()system call to flush both the data and log files. Ifinnodb_flush_method option is set to O_DSYNC, InnoDB uses O_SYNC to open and flush thelog files, and fsync()to flush the data files. If O_DIR…

信号量、互斥体和自旋锁

一、信号量 信号量又称为信号灯,它是用来协调不同进程间的数据对象的,而最主要的应用是共享内存方式的进程间通信。本质上,信号量是一个计数器,它用来记录对某个资源(如共享内存)的存取状况。一般说来&…

alembic教程

安装pip install alembic步骤 1.初始化 alembic 仓库 在终端中, cd 到你的项目目录中,然后执行命令 alembic init alembic ,创建一个名叫 alembic 的仓库。2.创建模型 class User(Base):__tablename__ userid Column(Integer,primary_keyTr…

实际的Reactor操作–检索Cloud Foundry应用程序的详细信息

CF-Java-Client是一个库,可通过程序访问Cloud Foundry Cloud Controller API 。 它建立在Project Reactor之上,它是Reactive Streams规范的实现,并且使用此库在Cloud Foundry环境中做一些实际的事情是一个有趣的练习。 考虑一个示例用例–给…

mysql生成app接口_Java实现app接口和Socket消息传递(10)java连接MySQL实现App登录接口...

原创:http://blog.csdn.net/iwanghang1.先来个Androiod端口的GIF效果图App图标大家可能没看清,这个是AndroidStudio3.0最新的默认App图标哦~~2.不要忘记把MySQL的jar导进来jar包放入的位置在这里:D:\eclipse-workspace\.metadata\.plugins\or…

centos yum安装nginx 提示 No package nginx available问题解决方法

问题原因: nginx位于第三方的yum源里面,而不在centos官方yum源里面 解决方法: 安装epel(Extra Packages for Enterprise Linux) a、去epel网站 http://fedoraproject.org/wiki/EPEL下载 b、我的系统是centos5.7,cpu是x86_64&#…

链接生成二维码图片

https://packagist.org/packages/houdunwang/qrcode转载于:https://www.cnblogs.com/pansidong/p/10247663.html

mysql pxc测试_Mysql同步机制 - PXC 压力测试 tpcc安装及使用

tpcc是针对mysql单机制定的测试标准,这个标准对于pxc集群来说要求太高,所有后面即使有些项目没有通过也不必太过在意,主要是压一下事务处理能力。Mysql单机虽然写入速度快,但相比于Mysql集群,单机能承受的并发能力远比…

RHEL(Red Hat Enterprise Linux)配置YUM源

前言 YUM(全称为 Yellow dog Updater, Modified)是一个在Fedora中的Shell前端软件包管理器。基于RPM包管理,能够从指定的服务器自动下载RPM包并且安装,可以自动处理依赖性关系,并且一次安装所有依赖的软体包&#xff…

java中集合判空_Java中的类型安全的空集合

java中集合判空我以前曾在Java Collections类的实用程序上进行过博客撰写,并且特别地在使用Usings Collections Methods上的博客emptyList(),emptyMap()和emptySet()上进行了博客撰写…

cnn验证码识别代码_中文项目:快速识别验证码,CNN也能为爬虫保驾护航

原标题:中文项目:快速识别验证码,CNN也能为爬虫保驾护航机器之心专栏作者:Nick Li随着卷积网络的推广,现在有各种各样的快捷应用,例如识别验证码和数学公式等。本文介绍了一个便捷的验证码识别项目&#xf…

CentOS yum 源的配置与使用

一、yum 简介 yum,是Yellow dog Updater, Modified 的简称,是杜克大学为了提高RPM 软件包安装性而开发的一种软件包管理器。起初是由yellow dog 这一发行版的开发者Terra Soft 研发,用python 写成,那时还叫做yup(yellow dog updat…

使用ActiveMQ Artemis在两个WildFly服务器之间构建水平JMS桥

有时有必要将不同的Message Broker连接在一起。 在企业消息传递中,此方案称为桥接。 可以使用JMS和其他协议(例如AMQP,ActiveMQ Artemis核心协议)来完成。 该博客文章重点介绍在WildFly中运行的JMS与两个Apache ActiveMQ Artemis …

mysql 逻辑备份 物理备份_数据库的逻辑备份和物理备份--非RMAN

数据库的逻辑备份和物理备份--非RMAN,不用借助其他工具,只要归档日志和物理备份就可以实现的备份数据库的备份和恢复常规而且重要,恢复得到理想状态逻辑备份利用EXP备份,从数据库提取写入操作系统文件1.可以导出一个完整的数据库2.也可以导出…

如何在myeclipse中导入jar包?

右键项目名--->Build Path—>Configure Build Path... 会弹出来一个框 在那四个选项选择 Libraries 然后再选择 右边 第二个选项Add External Jars... 然后就是你JAR的路径。一般将导入的外部包放在lib目录下。

python入门if语句练习_python入门视频:09 if语句_练习.mp4

本视频课程目录如下:python6天学习基础课程 ├─01天│ python入门视频:01 计算机组成-硬件设备.mp4│ python入门视频:02 计算机组成-软件设备.mp4│ python入门视频:03 程序的执行流程和小结_.mp4│ pyt…