pt平台老虎机-江西骨科什么医院好

首页

AD联系:507867812

pt平台老虎机

时间:2019-11-12 23:58:39 作者:通比牛牛 浏览量:17527

pt平台老虎机MySQL存储过程定义中的特性(characteristic)的含义MySQL存储过程定义中的特性(characteristic)的含义MySQL存储过程定义中的特性(characteristic)的含义MySQL存储过程定义中的特性(characteristic)的含义

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

通常在使用图形界面工具进行存储过程编写的时候,图形界面工具会自动加上这部分内容比,如用HeidiSQL创建存储过程的时候,会自动生成这些特性(characteristic)的默认值。但是这些特性究竟是干啥的,有什么影响,一直没有怎么弄清楚。

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

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

CONTAINS SQL 提供子程序使用数据的内在信息,这些特征值目前提供给服务器,并没有根据这些特征值来约束过程实际使用数据的情况,说白了就是没有使用的包括以下四种选择1.CONTAINS SQL表示子程序不包含读或者写数据的语句2.NO SQL 表示子程序不包含sql3.READS SQL DATA 表示子程序包含读数据的语句,但是不包含写数据的语句4.MODIFIES SQL DATA 表示子程序包含写数据的语句。

SQL SECURITY DEFINER 用来指定存储过程是使用创建者的许可来执行,还是执行者的许可来执行,默认值是DEFINERDEFINER 创建者的身份来调用,对于当前用户来说:如果执行存储过程的权限,且创建者有访问表的权限,当前用户可以成功执行过程的调用的说白了就是当前用户调用存储过程,存储过程执行的具体操作是借助定义存储过程的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了,结尾的标记而已)

linux

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

通常在使用图形界面工具进行存储过程编写的时候,图形界面工具会自动加上这部分内容比,如用HeidiSQL创建存储过程的时候,会自动生成这些特性(characteristic)的默认值。但是这些特性究竟是干啥的,有什么影响,一直没有怎么弄清楚。

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

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

CONTAINS SQL 提供子程序使用数据的内在信息,这些特征值目前提供给服务器,并没有根据这些特征值来约束过程实际使用数据的情况,说白了就是没有使用的包括以下四种选择1.CONTAINS SQL表示子程序不包含读或者写数据的语句2.NO SQL 表示子程序不包含sql3.READS SQL DATA 表示子程序包含读数据的语句,但是不包含写数据的语句4.MODIFIES SQL DATA 表示子程序包含写数据的语句。

SQL SECURITY DEFINER 用来指定存储过程是使用创建者的许可来执行,还是执行者的许可来执行,默认值是DEFINERDEFINER 创建者的身份来调用,对于当前用户来说:如果执行存储过程的权限,且创建者有访问表的权限,当前用户可以成功执行过程的调用的说白了就是当前用户调用存储过程,存储过程执行的具体操作是借助定义存储过程的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了,结尾的标记而已)

linuxMySQL存储过程定义中的特性(characteristic)的含义,见下图

MySQL存储过程定义中的特性(characteristic)的含义

MySQL存储过程定义中的特性(characteristic)的含义MySQL存储过程定义中的特性(characteristic)的含义,见下图

MySQL存储过程定义中的特性(characteristic)的含义

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

通常在使用图形界面工具进行存储过程编写的时候,图形界面工具会自动加上这部分内容比,如用HeidiSQL创建存储过程的时候,会自动生成这些特性(characteristic)的默认值。但是这些特性究竟是干啥的,有什么影响,一直没有怎么弄清楚。

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

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

CONTAINS SQL 提供子程序使用数据的内在信息,这些特征值目前提供给服务器,并没有根据这些特征值来约束过程实际使用数据的情况,说白了就是没有使用的包括以下四种选择1.CONTAINS SQL表示子程序不包含读或者写数据的语句2.NO SQL 表示子程序不包含sql3.READS SQL DATA 表示子程序包含读数据的语句,但是不包含写数据的语句4.MODIFIES SQL DATA 表示子程序包含写数据的语句。

SQL SECURITY DEFINER 用来指定存储过程是使用创建者的许可来执行,还是执行者的许可来执行,默认值是DEFINERDEFINER 创建者的身份来调用,对于当前用户来说:如果执行存储过程的权限,且创建者有访问表的权限,当前用户可以成功执行过程的调用的说白了就是当前用户调用存储过程,存储过程执行的具体操作是借助定义存储过程的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了,结尾的标记而已)

linux

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

通常在使用图形界面工具进行存储过程编写的时候,图形界面工具会自动加上这部分内容比,如用HeidiSQL创建存储过程的时候,会自动生成这些特性(characteristic)的默认值。但是这些特性究竟是干啥的,有什么影响,一直没有怎么弄清楚。

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

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

CONTAINS SQL 提供子程序使用数据的内在信息,这些特征值目前提供给服务器,并没有根据这些特征值来约束过程实际使用数据的情况,说白了就是没有使用的包括以下四种选择1.CONTAINS SQL表示子程序不包含读或者写数据的语句2.NO SQL 表示子程序不包含sql3.READS SQL DATA 表示子程序包含读数据的语句,但是不包含写数据的语句4.MODIFIES SQL DATA 表示子程序包含写数据的语句。

SQL SECURITY DEFINER 用来指定存储过程是使用创建者的许可来执行,还是执行者的许可来执行,默认值是DEFINERDEFINER 创建者的身份来调用,对于当前用户来说:如果执行存储过程的权限,且创建者有访问表的权限,当前用户可以成功执行过程的调用的说白了就是当前用户调用存储过程,存储过程执行的具体操作是借助定义存储过程的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了,结尾的标记而已)

linuxMySQL存储过程定义中的特性(characteristic)的含义,如下图

MySQL存储过程定义中的特性(characteristic)的含义

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

通常在使用图形界面工具进行存储过程编写的时候,图形界面工具会自动加上这部分内容比,如用HeidiSQL创建存储过程的时候,会自动生成这些特性(characteristic)的默认值。但是这些特性究竟是干啥的,有什么影响,一直没有怎么弄清楚。

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

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

CONTAINS SQL 提供子程序使用数据的内在信息,这些特征值目前提供给服务器,并没有根据这些特征值来约束过程实际使用数据的情况,说白了就是没有使用的包括以下四种选择1.CONTAINS SQL表示子程序不包含读或者写数据的语句2.NO SQL 表示子程序不包含sql3.READS SQL DATA 表示子程序包含读数据的语句,但是不包含写数据的语句4.MODIFIES SQL DATA 表示子程序包含写数据的语句。

SQL SECURITY DEFINER 用来指定存储过程是使用创建者的许可来执行,还是执行者的许可来执行,默认值是DEFINERDEFINER 创建者的身份来调用,对于当前用户来说:如果执行存储过程的权限,且创建者有访问表的权限,当前用户可以成功执行过程的调用的说白了就是当前用户调用存储过程,存储过程执行的具体操作是借助定义存储过程的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了,结尾的标记而已)

linux

MySQL存储过程定义中的特性(characteristic)的含义

如下图

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

通常在使用图形界面工具进行存储过程编写的时候,图形界面工具会自动加上这部分内容比,如用HeidiSQL创建存储过程的时候,会自动生成这些特性(characteristic)的默认值。但是这些特性究竟是干啥的,有什么影响,一直没有怎么弄清楚。

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

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

CONTAINS SQL 提供子程序使用数据的内在信息,这些特征值目前提供给服务器,并没有根据这些特征值来约束过程实际使用数据的情况,说白了就是没有使用的包括以下四种选择1.CONTAINS SQL表示子程序不包含读或者写数据的语句2.NO SQL 表示子程序不包含sql3.READS SQL DATA 表示子程序包含读数据的语句,但是不包含写数据的语句4.MODIFIES SQL DATA 表示子程序包含写数据的语句。

SQL SECURITY DEFINER 用来指定存储过程是使用创建者的许可来执行,还是执行者的许可来执行,默认值是DEFINERDEFINER 创建者的身份来调用,对于当前用户来说:如果执行存储过程的权限,且创建者有访问表的权限,当前用户可以成功执行过程的调用的说白了就是当前用户调用存储过程,存储过程执行的具体操作是借助定义存储过程的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了,结尾的标记而已)

linux,如下图

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

通常在使用图形界面工具进行存储过程编写的时候,图形界面工具会自动加上这部分内容比,如用HeidiSQL创建存储过程的时候,会自动生成这些特性(characteristic)的默认值。但是这些特性究竟是干啥的,有什么影响,一直没有怎么弄清楚。

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

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

CONTAINS SQL 提供子程序使用数据的内在信息,这些特征值目前提供给服务器,并没有根据这些特征值来约束过程实际使用数据的情况,说白了就是没有使用的包括以下四种选择1.CONTAINS SQL表示子程序不包含读或者写数据的语句2.NO SQL 表示子程序不包含sql3.READS SQL DATA 表示子程序包含读数据的语句,但是不包含写数据的语句4.MODIFIES SQL DATA 表示子程序包含写数据的语句。

SQL SECURITY DEFINER 用来指定存储过程是使用创建者的许可来执行,还是执行者的许可来执行,默认值是DEFINERDEFINER 创建者的身份来调用,对于当前用户来说:如果执行存储过程的权限,且创建者有访问表的权限,当前用户可以成功执行过程的调用的说白了就是当前用户调用存储过程,存储过程执行的具体操作是借助定义存储过程的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了,结尾的标记而已)

linuxMySQL存储过程定义中的特性(characteristic)的含义,见图

pt平台老虎机MySQL存储过程定义中的特性(characteristic)的含义MySQL存储过程定义中的特性(characteristic)的含义MySQL存储过程定义中的特性(characteristic)的含义

MySQL存储过程定义中的特性(characteristic)的含义

MySQL存储过程定义中的特性(characteristic)的含义MySQL存储过程定义中的特性(characteristic)的含义MySQL存储过程定义中的特性(characteristic)的含义

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

通常在使用图形界面工具进行存储过程编写的时候,图形界面工具会自动加上这部分内容比,如用HeidiSQL创建存储过程的时候,会自动生成这些特性(characteristic)的默认值。但是这些特性究竟是干啥的,有什么影响,一直没有怎么弄清楚。

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

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

CONTAINS SQL 提供子程序使用数据的内在信息,这些特征值目前提供给服务器,并没有根据这些特征值来约束过程实际使用数据的情况,说白了就是没有使用的包括以下四种选择1.CONTAINS SQL表示子程序不包含读或者写数据的语句2.NO SQL 表示子程序不包含sql3.READS SQL DATA 表示子程序包含读数据的语句,但是不包含写数据的语句4.MODIFIES SQL DATA 表示子程序包含写数据的语句。

SQL SECURITY DEFINER 用来指定存储过程是使用创建者的许可来执行,还是执行者的许可来执行,默认值是DEFINERDEFINER 创建者的身份来调用,对于当前用户来说:如果执行存储过程的权限,且创建者有访问表的权限,当前用户可以成功执行过程的调用的说白了就是当前用户调用存储过程,存储过程执行的具体操作是借助定义存储过程的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了,结尾的标记而已)

linuxMySQL存储过程定义中的特性(characteristic)的含义

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

通常在使用图形界面工具进行存储过程编写的时候,图形界面工具会自动加上这部分内容比,如用HeidiSQL创建存储过程的时候,会自动生成这些特性(characteristic)的默认值。但是这些特性究竟是干啥的,有什么影响,一直没有怎么弄清楚。

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

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

CONTAINS SQL 提供子程序使用数据的内在信息,这些特征值目前提供给服务器,并没有根据这些特征值来约束过程实际使用数据的情况,说白了就是没有使用的包括以下四种选择1.CONTAINS SQL表示子程序不包含读或者写数据的语句2.NO SQL 表示子程序不包含sql3.READS SQL DATA 表示子程序包含读数据的语句,但是不包含写数据的语句4.MODIFIES SQL DATA 表示子程序包含写数据的语句。

SQL SECURITY DEFINER 用来指定存储过程是使用创建者的许可来执行,还是执行者的许可来执行,默认值是DEFINERDEFINER 创建者的身份来调用,对于当前用户来说:如果执行存储过程的权限,且创建者有访问表的权限,当前用户可以成功执行过程的调用的说白了就是当前用户调用存储过程,存储过程执行的具体操作是借助定义存储过程的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了,结尾的标记而已)

linux

MySQL存储过程定义中的特性(characteristic)的含义

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

通常在使用图形界面工具进行存储过程编写的时候,图形界面工具会自动加上这部分内容比,如用HeidiSQL创建存储过程的时候,会自动生成这些特性(characteristic)的默认值。但是这些特性究竟是干啥的,有什么影响,一直没有怎么弄清楚。

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

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

CONTAINS SQL 提供子程序使用数据的内在信息,这些特征值目前提供给服务器,并没有根据这些特征值来约束过程实际使用数据的情况,说白了就是没有使用的包括以下四种选择1.CONTAINS SQL表示子程序不包含读或者写数据的语句2.NO SQL 表示子程序不包含sql3.READS SQL DATA 表示子程序包含读数据的语句,但是不包含写数据的语句4.MODIFIES SQL DATA 表示子程序包含写数据的语句。

SQL SECURITY DEFINER 用来指定存储过程是使用创建者的许可来执行,还是执行者的许可来执行,默认值是DEFINERDEFINER 创建者的身份来调用,对于当前用户来说:如果执行存储过程的权限,且创建者有访问表的权限,当前用户可以成功执行过程的调用的说白了就是当前用户调用存储过程,存储过程执行的具体操作是借助定义存储过程的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了,结尾的标记而已)

linux

MySQL存储过程定义中的特性(characteristic)的含义

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

通常在使用图形界面工具进行存储过程编写的时候,图形界面工具会自动加上这部分内容比,如用HeidiSQL创建存储过程的时候,会自动生成这些特性(characteristic)的默认值。但是这些特性究竟是干啥的,有什么影响,一直没有怎么弄清楚。

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

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

CONTAINS SQL 提供子程序使用数据的内在信息,这些特征值目前提供给服务器,并没有根据这些特征值来约束过程实际使用数据的情况,说白了就是没有使用的包括以下四种选择1.CONTAINS SQL表示子程序不包含读或者写数据的语句2.NO SQL 表示子程序不包含sql3.READS SQL DATA 表示子程序包含读数据的语句,但是不包含写数据的语句4.MODIFIES SQL DATA 表示子程序包含写数据的语句。

SQL SECURITY DEFINER 用来指定存储过程是使用创建者的许可来执行,还是执行者的许可来执行,默认值是DEFINERDEFINER 创建者的身份来调用,对于当前用户来说:如果执行存储过程的权限,且创建者有访问表的权限,当前用户可以成功执行过程的调用的说白了就是当前用户调用存储过程,存储过程执行的具体操作是借助定义存储过程的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了,结尾的标记而已)

linux

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

通常在使用图形界面工具进行存储过程编写的时候,图形界面工具会自动加上这部分内容比,如用HeidiSQL创建存储过程的时候,会自动生成这些特性(characteristic)的默认值。但是这些特性究竟是干啥的,有什么影响,一直没有怎么弄清楚。

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

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

CONTAINS SQL 提供子程序使用数据的内在信息,这些特征值目前提供给服务器,并没有根据这些特征值来约束过程实际使用数据的情况,说白了就是没有使用的包括以下四种选择1.CONTAINS SQL表示子程序不包含读或者写数据的语句2.NO SQL 表示子程序不包含sql3.READS SQL DATA 表示子程序包含读数据的语句,但是不包含写数据的语句4.MODIFIES SQL DATA 表示子程序包含写数据的语句。

SQL SECURITY DEFINER 用来指定存储过程是使用创建者的许可来执行,还是执行者的许可来执行,默认值是DEFINERDEFINER 创建者的身份来调用,对于当前用户来说:如果执行存储过程的权限,且创建者有访问表的权限,当前用户可以成功执行过程的调用的说白了就是当前用户调用存储过程,存储过程执行的具体操作是借助定义存储过程的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了,结尾的标记而已)

linuxMySQL存储过程定义中的特性(characteristic)的含义

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

通常在使用图形界面工具进行存储过程编写的时候,图形界面工具会自动加上这部分内容比,如用HeidiSQL创建存储过程的时候,会自动生成这些特性(characteristic)的默认值。但是这些特性究竟是干啥的,有什么影响,一直没有怎么弄清楚。

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

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

CONTAINS SQL 提供子程序使用数据的内在信息,这些特征值目前提供给服务器,并没有根据这些特征值来约束过程实际使用数据的情况,说白了就是没有使用的包括以下四种选择1.CONTAINS SQL表示子程序不包含读或者写数据的语句2.NO SQL 表示子程序不包含sql3.READS SQL DATA 表示子程序包含读数据的语句,但是不包含写数据的语句4.MODIFIES SQL DATA 表示子程序包含写数据的语句。

SQL SECURITY DEFINER 用来指定存储过程是使用创建者的许可来执行,还是执行者的许可来执行,默认值是DEFINERDEFINER 创建者的身份来调用,对于当前用户来说:如果执行存储过程的权限,且创建者有访问表的权限,当前用户可以成功执行过程的调用的说白了就是当前用户调用存储过程,存储过程执行的具体操作是借助定义存储过程的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了,结尾的标记而已)

linux

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

通常在使用图形界面工具进行存储过程编写的时候,图形界面工具会自动加上这部分内容比,如用HeidiSQL创建存储过程的时候,会自动生成这些特性(characteristic)的默认值。但是这些特性究竟是干啥的,有什么影响,一直没有怎么弄清楚。

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

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

CONTAINS SQL 提供子程序使用数据的内在信息,这些特征值目前提供给服务器,并没有根据这些特征值来约束过程实际使用数据的情况,说白了就是没有使用的包括以下四种选择1.CONTAINS SQL表示子程序不包含读或者写数据的语句2.NO SQL 表示子程序不包含sql3.READS SQL DATA 表示子程序包含读数据的语句,但是不包含写数据的语句4.MODIFIES SQL DATA 表示子程序包含写数据的语句。

SQL SECURITY DEFINER 用来指定存储过程是使用创建者的许可来执行,还是执行者的许可来执行,默认值是DEFINERDEFINER 创建者的身份来调用,对于当前用户来说:如果执行存储过程的权限,且创建者有访问表的权限,当前用户可以成功执行过程的调用的说白了就是当前用户调用存储过程,存储过程执行的具体操作是借助定义存储过程的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了,结尾的标记而已)

linuxMySQL存储过程定义中的特性(characteristic)的含义MySQL存储过程定义中的特性(characteristic)的含义

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

通常在使用图形界面工具进行存储过程编写的时候,图形界面工具会自动加上这部分内容比,如用HeidiSQL创建存储过程的时候,会自动生成这些特性(characteristic)的默认值。但是这些特性究竟是干啥的,有什么影响,一直没有怎么弄清楚。

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

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

CONTAINS SQL 提供子程序使用数据的内在信息,这些特征值目前提供给服务器,并没有根据这些特征值来约束过程实际使用数据的情况,说白了就是没有使用的包括以下四种选择1.CONTAINS SQL表示子程序不包含读或者写数据的语句2.NO SQL 表示子程序不包含sql3.READS SQL DATA 表示子程序包含读数据的语句,但是不包含写数据的语句4.MODIFIES SQL DATA 表示子程序包含写数据的语句。

SQL SECURITY DEFINER 用来指定存储过程是使用创建者的许可来执行,还是执行者的许可来执行,默认值是DEFINERDEFINER 创建者的身份来调用,对于当前用户来说:如果执行存储过程的权限,且创建者有访问表的权限,当前用户可以成功执行过程的调用的说白了就是当前用户调用存储过程,存储过程执行的具体操作是借助定义存储过程的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了,结尾的标记而已)

linuxMySQL存储过程定义中的特性(characteristic)的含义

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

通常在使用图形界面工具进行存储过程编写的时候,图形界面工具会自动加上这部分内容比,如用HeidiSQL创建存储过程的时候,会自动生成这些特性(characteristic)的默认值。但是这些特性究竟是干啥的,有什么影响,一直没有怎么弄清楚。

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

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

CONTAINS SQL 提供子程序使用数据的内在信息,这些特征值目前提供给服务器,并没有根据这些特征值来约束过程实际使用数据的情况,说白了就是没有使用的包括以下四种选择1.CONTAINS SQL表示子程序不包含读或者写数据的语句2.NO SQL 表示子程序不包含sql3.READS SQL DATA 表示子程序包含读数据的语句,但是不包含写数据的语句4.MODIFIES SQL DATA 表示子程序包含写数据的语句。

SQL SECURITY DEFINER 用来指定存储过程是使用创建者的许可来执行,还是执行者的许可来执行,默认值是DEFINERDEFINER 创建者的身份来调用,对于当前用户来说:如果执行存储过程的权限,且创建者有访问表的权限,当前用户可以成功执行过程的调用的说白了就是当前用户调用存储过程,存储过程执行的具体操作是借助定义存储过程的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了,结尾的标记而已)

linux

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

通常在使用图形界面工具进行存储过程编写的时候,图形界面工具会自动加上这部分内容比,如用HeidiSQL创建存储过程的时候,会自动生成这些特性(characteristic)的默认值。但是这些特性究竟是干啥的,有什么影响,一直没有怎么弄清楚。

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

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

CONTAINS SQL 提供子程序使用数据的内在信息,这些特征值目前提供给服务器,并没有根据这些特征值来约束过程实际使用数据的情况,说白了就是没有使用的包括以下四种选择1.CONTAINS SQL表示子程序不包含读或者写数据的语句2.NO SQL 表示子程序不包含sql3.READS SQL DATA 表示子程序包含读数据的语句,但是不包含写数据的语句4.MODIFIES SQL DATA 表示子程序包含写数据的语句。

SQL SECURITY DEFINER 用来指定存储过程是使用创建者的许可来执行,还是执行者的许可来执行,默认值是DEFINERDEFINER 创建者的身份来调用,对于当前用户来说:如果执行存储过程的权限,且创建者有访问表的权限,当前用户可以成功执行过程的调用的说白了就是当前用户调用存储过程,存储过程执行的具体操作是借助定义存储过程的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了,结尾的标记而已)

linuxMySQL存储过程定义中的特性(characteristic)的含义。

MySQL存储过程定义中的特性(characteristic)的含义

pt平台老虎机

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

通常在使用图形界面工具进行存储过程编写的时候,图形界面工具会自动加上这部分内容比,如用HeidiSQL创建存储过程的时候,会自动生成这些特性(characteristic)的默认值。但是这些特性究竟是干啥的,有什么影响,一直没有怎么弄清楚。

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

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

CONTAINS SQL 提供子程序使用数据的内在信息,这些特征值目前提供给服务器,并没有根据这些特征值来约束过程实际使用数据的情况,说白了就是没有使用的包括以下四种选择1.CONTAINS SQL表示子程序不包含读或者写数据的语句2.NO SQL 表示子程序不包含sql3.READS SQL DATA 表示子程序包含读数据的语句,但是不包含写数据的语句4.MODIFIES SQL DATA 表示子程序包含写数据的语句。

SQL SECURITY DEFINER 用来指定存储过程是使用创建者的许可来执行,还是执行者的许可来执行,默认值是DEFINERDEFINER 创建者的身份来调用,对于当前用户来说:如果执行存储过程的权限,且创建者有访问表的权限,当前用户可以成功执行过程的调用的说白了就是当前用户调用存储过程,存储过程执行的具体操作是借助定义存储过程的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了,结尾的标记而已)

linux

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

通常在使用图形界面工具进行存储过程编写的时候,图形界面工具会自动加上这部分内容比,如用HeidiSQL创建存储过程的时候,会自动生成这些特性(characteristic)的默认值。但是这些特性究竟是干啥的,有什么影响,一直没有怎么弄清楚。

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

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

CONTAINS SQL 提供子程序使用数据的内在信息,这些特征值目前提供给服务器,并没有根据这些特征值来约束过程实际使用数据的情况,说白了就是没有使用的包括以下四种选择1.CONTAINS SQL表示子程序不包含读或者写数据的语句2.NO SQL 表示子程序不包含sql3.READS SQL DATA 表示子程序包含读数据的语句,但是不包含写数据的语句4.MODIFIES SQL DATA 表示子程序包含写数据的语句。

SQL SECURITY DEFINER 用来指定存储过程是使用创建者的许可来执行,还是执行者的许可来执行,默认值是DEFINERDEFINER 创建者的身份来调用,对于当前用户来说:如果执行存储过程的权限,且创建者有访问表的权限,当前用户可以成功执行过程的调用的说白了就是当前用户调用存储过程,存储过程执行的具体操作是借助定义存储过程的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了,结尾的标记而已)

linux

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

通常在使用图形界面工具进行存储过程编写的时候,图形界面工具会自动加上这部分内容比,如用HeidiSQL创建存储过程的时候,会自动生成这些特性(characteristic)的默认值。但是这些特性究竟是干啥的,有什么影响,一直没有怎么弄清楚。

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

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

CONTAINS SQL 提供子程序使用数据的内在信息,这些特征值目前提供给服务器,并没有根据这些特征值来约束过程实际使用数据的情况,说白了就是没有使用的包括以下四种选择1.CONTAINS SQL表示子程序不包含读或者写数据的语句2.NO SQL 表示子程序不包含sql3.READS SQL DATA 表示子程序包含读数据的语句,但是不包含写数据的语句4.MODIFIES SQL DATA 表示子程序包含写数据的语句。

SQL SECURITY DEFINER 用来指定存储过程是使用创建者的许可来执行,还是执行者的许可来执行,默认值是DEFINERDEFINER 创建者的身份来调用,对于当前用户来说:如果执行存储过程的权限,且创建者有访问表的权限,当前用户可以成功执行过程的调用的说白了就是当前用户调用存储过程,存储过程执行的具体操作是借助定义存储过程的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了,结尾的标记而已)

linux

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

通常在使用图形界面工具进行存储过程编写的时候,图形界面工具会自动加上这部分内容比,如用HeidiSQL创建存储过程的时候,会自动生成这些特性(characteristic)的默认值。但是这些特性究竟是干啥的,有什么影响,一直没有怎么弄清楚。

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

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

CONTAINS SQL 提供子程序使用数据的内在信息,这些特征值目前提供给服务器,并没有根据这些特征值来约束过程实际使用数据的情况,说白了就是没有使用的包括以下四种选择1.CONTAINS SQL表示子程序不包含读或者写数据的语句2.NO SQL 表示子程序不包含sql3.READS SQL DATA 表示子程序包含读数据的语句,但是不包含写数据的语句4.MODIFIES SQL DATA 表示子程序包含写数据的语句。

SQL SECURITY DEFINER 用来指定存储过程是使用创建者的许可来执行,还是执行者的许可来执行,默认值是DEFINERDEFINER 创建者的身份来调用,对于当前用户来说:如果执行存储过程的权限,且创建者有访问表的权限,当前用户可以成功执行过程的调用的说白了就是当前用户调用存储过程,存储过程执行的具体操作是借助定义存储过程的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了,结尾的标记而已)

linux

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

通常在使用图形界面工具进行存储过程编写的时候,图形界面工具会自动加上这部分内容比,如用HeidiSQL创建存储过程的时候,会自动生成这些特性(characteristic)的默认值。但是这些特性究竟是干啥的,有什么影响,一直没有怎么弄清楚。

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

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

CONTAINS SQL 提供子程序使用数据的内在信息,这些特征值目前提供给服务器,并没有根据这些特征值来约束过程实际使用数据的情况,说白了就是没有使用的包括以下四种选择1.CONTAINS SQL表示子程序不包含读或者写数据的语句2.NO SQL 表示子程序不包含sql3.READS SQL DATA 表示子程序包含读数据的语句,但是不包含写数据的语句4.MODIFIES SQL DATA 表示子程序包含写数据的语句。

SQL SECURITY DEFINER 用来指定存储过程是使用创建者的许可来执行,还是执行者的许可来执行,默认值是DEFINERDEFINER 创建者的身份来调用,对于当前用户来说:如果执行存储过程的权限,且创建者有访问表的权限,当前用户可以成功执行过程的调用的说白了就是当前用户调用存储过程,存储过程执行的具体操作是借助定义存储过程的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了,结尾的标记而已)

linuxMySQL存储过程定义中的特性(characteristic)的含义MySQL存储过程定义中的特性(characteristic)的含义MySQL存储过程定义中的特性(characteristic)的含义MySQL存储过程定义中的特性(characteristic)的含义

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

通常在使用图形界面工具进行存储过程编写的时候,图形界面工具会自动加上这部分内容比,如用HeidiSQL创建存储过程的时候,会自动生成这些特性(characteristic)的默认值。但是这些特性究竟是干啥的,有什么影响,一直没有怎么弄清楚。

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

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

CONTAINS SQL 提供子程序使用数据的内在信息,这些特征值目前提供给服务器,并没有根据这些特征值来约束过程实际使用数据的情况,说白了就是没有使用的包括以下四种选择1.CONTAINS SQL表示子程序不包含读或者写数据的语句2.NO SQL 表示子程序不包含sql3.READS SQL DATA 表示子程序包含读数据的语句,但是不包含写数据的语句4.MODIFIES SQL DATA 表示子程序包含写数据的语句。

SQL SECURITY DEFINER 用来指定存储过程是使用创建者的许可来执行,还是执行者的许可来执行,默认值是DEFINERDEFINER 创建者的身份来调用,对于当前用户来说:如果执行存储过程的权限,且创建者有访问表的权限,当前用户可以成功执行过程的调用的说白了就是当前用户调用存储过程,存储过程执行的具体操作是借助定义存储过程的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了,结尾的标记而已)

linux

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

通常在使用图形界面工具进行存储过程编写的时候,图形界面工具会自动加上这部分内容比,如用HeidiSQL创建存储过程的时候,会自动生成这些特性(characteristic)的默认值。但是这些特性究竟是干啥的,有什么影响,一直没有怎么弄清楚。

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

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

CONTAINS SQL 提供子程序使用数据的内在信息,这些特征值目前提供给服务器,并没有根据这些特征值来约束过程实际使用数据的情况,说白了就是没有使用的包括以下四种选择1.CONTAINS SQL表示子程序不包含读或者写数据的语句2.NO SQL 表示子程序不包含sql3.READS SQL DATA 表示子程序包含读数据的语句,但是不包含写数据的语句4.MODIFIES SQL DATA 表示子程序包含写数据的语句。

SQL SECURITY DEFINER 用来指定存储过程是使用创建者的许可来执行,还是执行者的许可来执行,默认值是DEFINERDEFINER 创建者的身份来调用,对于当前用户来说:如果执行存储过程的权限,且创建者有访问表的权限,当前用户可以成功执行过程的调用的说白了就是当前用户调用存储过程,存储过程执行的具体操作是借助定义存储过程的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了,结尾的标记而已)

linux

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

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

通常在使用图形界面工具进行存储过程编写的时候,图形界面工具会自动加上这部分内容比,如用HeidiSQL创建存储过程的时候,会自动生成这些特性(characteristic)的默认值。但是这些特性究竟是干啥的,有什么影响,一直没有怎么弄清楚。

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

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

CONTAINS SQL 提供子程序使用数据的内在信息,这些特征值目前提供给服务器,并没有根据这些特征值来约束过程实际使用数据的情况,说白了就是没有使用的包括以下四种选择1.CONTAINS SQL表示子程序不包含读或者写数据的语句2.NO SQL 表示子程序不包含sql3.READS SQL DATA 表示子程序包含读数据的语句,但是不包含写数据的语句4.MODIFIES SQL DATA 表示子程序包含写数据的语句。

SQL SECURITY DEFINER 用来指定存储过程是使用创建者的许可来执行,还是执行者的许可来执行,默认值是DEFINERDEFINER 创建者的身份来调用,对于当前用户来说:如果执行存储过程的权限,且创建者有访问表的权限,当前用户可以成功执行过程的调用的说白了就是当前用户调用存储过程,存储过程执行的具体操作是借助定义存储过程的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了,结尾的标记而已)

linux

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

通常在使用图形界面工具进行存储过程编写的时候,图形界面工具会自动加上这部分内容比,如用HeidiSQL创建存储过程的时候,会自动生成这些特性(characteristic)的默认值。但是这些特性究竟是干啥的,有什么影响,一直没有怎么弄清楚。

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

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

CONTAINS SQL 提供子程序使用数据的内在信息,这些特征值目前提供给服务器,并没有根据这些特征值来约束过程实际使用数据的情况,说白了就是没有使用的包括以下四种选择1.CONTAINS SQL表示子程序不包含读或者写数据的语句2.NO SQL 表示子程序不包含sql3.READS SQL DATA 表示子程序包含读数据的语句,但是不包含写数据的语句4.MODIFIES SQL DATA 表示子程序包含写数据的语句。

SQL SECURITY DEFINER 用来指定存储过程是使用创建者的许可来执行,还是执行者的许可来执行,默认值是DEFINERDEFINER 创建者的身份来调用,对于当前用户来说:如果执行存储过程的权限,且创建者有访问表的权限,当前用户可以成功执行过程的调用的说白了就是当前用户调用存储过程,存储过程执行的具体操作是借助定义存储过程的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了,结尾的标记而已)

linuxMySQL存储过程定义中的特性(characteristic)的含义

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

通常在使用图形界面工具进行存储过程编写的时候,图形界面工具会自动加上这部分内容比,如用HeidiSQL创建存储过程的时候,会自动生成这些特性(characteristic)的默认值。但是这些特性究竟是干啥的,有什么影响,一直没有怎么弄清楚。

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

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

CONTAINS SQL 提供子程序使用数据的内在信息,这些特征值目前提供给服务器,并没有根据这些特征值来约束过程实际使用数据的情况,说白了就是没有使用的包括以下四种选择1.CONTAINS SQL表示子程序不包含读或者写数据的语句2.NO SQL 表示子程序不包含sql3.READS SQL DATA 表示子程序包含读数据的语句,但是不包含写数据的语句4.MODIFIES SQL DATA 表示子程序包含写数据的语句。

SQL SECURITY DEFINER 用来指定存储过程是使用创建者的许可来执行,还是执行者的许可来执行,默认值是DEFINERDEFINER 创建者的身份来调用,对于当前用户来说:如果执行存储过程的权限,且创建者有访问表的权限,当前用户可以成功执行过程的调用的说白了就是当前用户调用存储过程,存储过程执行的具体操作是借助定义存储过程的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了,结尾的标记而已)

linuxMySQL存储过程定义中的特性(characteristic)的含义MySQL存储过程定义中的特性(characteristic)的含义

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

通常在使用图形界面工具进行存储过程编写的时候,图形界面工具会自动加上这部分内容比,如用HeidiSQL创建存储过程的时候,会自动生成这些特性(characteristic)的默认值。但是这些特性究竟是干啥的,有什么影响,一直没有怎么弄清楚。

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

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

CONTAINS SQL 提供子程序使用数据的内在信息,这些特征值目前提供给服务器,并没有根据这些特征值来约束过程实际使用数据的情况,说白了就是没有使用的包括以下四种选择1.CONTAINS SQL表示子程序不包含读或者写数据的语句2.NO SQL 表示子程序不包含sql3.READS SQL DATA 表示子程序包含读数据的语句,但是不包含写数据的语句4.MODIFIES SQL DATA 表示子程序包含写数据的语句。

SQL SECURITY DEFINER 用来指定存储过程是使用创建者的许可来执行,还是执行者的许可来执行,默认值是DEFINERDEFINER 创建者的身份来调用,对于当前用户来说:如果执行存储过程的权限,且创建者有访问表的权限,当前用户可以成功执行过程的调用的说白了就是当前用户调用存储过程,存储过程执行的具体操作是借助定义存储过程的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了,结尾的标记而已)

linuxMySQL存储过程定义中的特性(characteristic)的含义

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

通常在使用图形界面工具进行存储过程编写的时候,图形界面工具会自动加上这部分内容比,如用HeidiSQL创建存储过程的时候,会自动生成这些特性(characteristic)的默认值。但是这些特性究竟是干啥的,有什么影响,一直没有怎么弄清楚。

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

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

CONTAINS SQL 提供子程序使用数据的内在信息,这些特征值目前提供给服务器,并没有根据这些特征值来约束过程实际使用数据的情况,说白了就是没有使用的包括以下四种选择1.CONTAINS SQL表示子程序不包含读或者写数据的语句2.NO SQL 表示子程序不包含sql3.READS SQL DATA 表示子程序包含读数据的语句,但是不包含写数据的语句4.MODIFIES SQL DATA 表示子程序包含写数据的语句。

SQL SECURITY DEFINER 用来指定存储过程是使用创建者的许可来执行,还是执行者的许可来执行,默认值是DEFINERDEFINER 创建者的身份来调用,对于当前用户来说:如果执行存储过程的权限,且创建者有访问表的权限,当前用户可以成功执行过程的调用的说白了就是当前用户调用存储过程,存储过程执行的具体操作是借助定义存储过程的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了,结尾的标记而已)

linux

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

通常在使用图形界面工具进行存储过程编写的时候,图形界面工具会自动加上这部分内容比,如用HeidiSQL创建存储过程的时候,会自动生成这些特性(characteristic)的默认值。但是这些特性究竟是干啥的,有什么影响,一直没有怎么弄清楚。

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

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

CONTAINS SQL 提供子程序使用数据的内在信息,这些特征值目前提供给服务器,并没有根据这些特征值来约束过程实际使用数据的情况,说白了就是没有使用的包括以下四种选择1.CONTAINS SQL表示子程序不包含读或者写数据的语句2.NO SQL 表示子程序不包含sql3.READS SQL DATA 表示子程序包含读数据的语句,但是不包含写数据的语句4.MODIFIES SQL DATA 表示子程序包含写数据的语句。

SQL SECURITY DEFINER 用来指定存储过程是使用创建者的许可来执行,还是执行者的许可来执行,默认值是DEFINERDEFINER 创建者的身份来调用,对于当前用户来说:如果执行存储过程的权限,且创建者有访问表的权限,当前用户可以成功执行过程的调用的说白了就是当前用户调用存储过程,存储过程执行的具体操作是借助定义存储过程的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了,结尾的标记而已)

linux

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

通常在使用图形界面工具进行存储过程编写的时候,图形界面工具会自动加上这部分内容比,如用HeidiSQL创建存储过程的时候,会自动生成这些特性(characteristic)的默认值。但是这些特性究竟是干啥的,有什么影响,一直没有怎么弄清楚。

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

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

CONTAINS SQL 提供子程序使用数据的内在信息,这些特征值目前提供给服务器,并没有根据这些特征值来约束过程实际使用数据的情况,说白了就是没有使用的包括以下四种选择1.CONTAINS SQL表示子程序不包含读或者写数据的语句2.NO SQL 表示子程序不包含sql3.READS SQL DATA 表示子程序包含读数据的语句,但是不包含写数据的语句4.MODIFIES SQL DATA 表示子程序包含写数据的语句。

SQL SECURITY DEFINER 用来指定存储过程是使用创建者的许可来执行,还是执行者的许可来执行,默认值是DEFINERDEFINER 创建者的身份来调用,对于当前用户来说:如果执行存储过程的权限,且创建者有访问表的权限,当前用户可以成功执行过程的调用的说白了就是当前用户调用存储过程,存储过程执行的具体操作是借助定义存储过程的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了,结尾的标记而已)

linuxMySQL存储过程定义中的特性(characteristic)的含义MySQL存储过程定义中的特性(characteristic)的含义

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

通常在使用图形界面工具进行存储过程编写的时候,图形界面工具会自动加上这部分内容比,如用HeidiSQL创建存储过程的时候,会自动生成这些特性(characteristic)的默认值。但是这些特性究竟是干啥的,有什么影响,一直没有怎么弄清楚。

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

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

CONTAINS SQL 提供子程序使用数据的内在信息,这些特征值目前提供给服务器,并没有根据这些特征值来约束过程实际使用数据的情况,说白了就是没有使用的包括以下四种选择1.CONTAINS SQL表示子程序不包含读或者写数据的语句2.NO SQL 表示子程序不包含sql3.READS SQL DATA 表示子程序包含读数据的语句,但是不包含写数据的语句4.MODIFIES SQL DATA 表示子程序包含写数据的语句。

SQL SECURITY DEFINER 用来指定存储过程是使用创建者的许可来执行,还是执行者的许可来执行,默认值是DEFINERDEFINER 创建者的身份来调用,对于当前用户来说:如果执行存储过程的权限,且创建者有访问表的权限,当前用户可以成功执行过程的调用的说白了就是当前用户调用存储过程,存储过程执行的具体操作是借助定义存储过程的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了,结尾的标记而已)

linux

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

通常在使用图形界面工具进行存储过程编写的时候,图形界面工具会自动加上这部分内容比,如用HeidiSQL创建存储过程的时候,会自动生成这些特性(characteristic)的默认值。但是这些特性究竟是干啥的,有什么影响,一直没有怎么弄清楚。

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

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

CONTAINS SQL 提供子程序使用数据的内在信息,这些特征值目前提供给服务器,并没有根据这些特征值来约束过程实际使用数据的情况,说白了就是没有使用的包括以下四种选择1.CONTAINS SQL表示子程序不包含读或者写数据的语句2.NO SQL 表示子程序不包含sql3.READS SQL DATA 表示子程序包含读数据的语句,但是不包含写数据的语句4.MODIFIES SQL DATA 表示子程序包含写数据的语句。

SQL SECURITY DEFINER 用来指定存储过程是使用创建者的许可来执行,还是执行者的许可来执行,默认值是DEFINERDEFINER 创建者的身份来调用,对于当前用户来说:如果执行存储过程的权限,且创建者有访问表的权限,当前用户可以成功执行过程的调用的说白了就是当前用户调用存储过程,存储过程执行的具体操作是借助定义存储过程的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了,结尾的标记而已)

linux

2.

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

通常在使用图形界面工具进行存储过程编写的时候,图形界面工具会自动加上这部分内容比,如用HeidiSQL创建存储过程的时候,会自动生成这些特性(characteristic)的默认值。但是这些特性究竟是干啥的,有什么影响,一直没有怎么弄清楚。

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

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

CONTAINS SQL 提供子程序使用数据的内在信息,这些特征值目前提供给服务器,并没有根据这些特征值来约束过程实际使用数据的情况,说白了就是没有使用的包括以下四种选择1.CONTAINS SQL表示子程序不包含读或者写数据的语句2.NO SQL 表示子程序不包含sql3.READS SQL DATA 表示子程序包含读数据的语句,但是不包含写数据的语句4.MODIFIES SQL DATA 表示子程序包含写数据的语句。

SQL SECURITY DEFINER 用来指定存储过程是使用创建者的许可来执行,还是执行者的许可来执行,默认值是DEFINERDEFINER 创建者的身份来调用,对于当前用户来说:如果执行存储过程的权限,且创建者有访问表的权限,当前用户可以成功执行过程的调用的说白了就是当前用户调用存储过程,存储过程执行的具体操作是借助定义存储过程的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了,结尾的标记而已)

linux

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

通常在使用图形界面工具进行存储过程编写的时候,图形界面工具会自动加上这部分内容比,如用HeidiSQL创建存储过程的时候,会自动生成这些特性(characteristic)的默认值。但是这些特性究竟是干啥的,有什么影响,一直没有怎么弄清楚。

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

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

CONTAINS SQL 提供子程序使用数据的内在信息,这些特征值目前提供给服务器,并没有根据这些特征值来约束过程实际使用数据的情况,说白了就是没有使用的包括以下四种选择1.CONTAINS SQL表示子程序不包含读或者写数据的语句2.NO SQL 表示子程序不包含sql3.READS SQL DATA 表示子程序包含读数据的语句,但是不包含写数据的语句4.MODIFIES SQL DATA 表示子程序包含写数据的语句。

SQL SECURITY DEFINER 用来指定存储过程是使用创建者的许可来执行,还是执行者的许可来执行,默认值是DEFINERDEFINER 创建者的身份来调用,对于当前用户来说:如果执行存储过程的权限,且创建者有访问表的权限,当前用户可以成功执行过程的调用的说白了就是当前用户调用存储过程,存储过程执行的具体操作是借助定义存储过程的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了,结尾的标记而已)

linux

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

通常在使用图形界面工具进行存储过程编写的时候,图形界面工具会自动加上这部分内容比,如用HeidiSQL创建存储过程的时候,会自动生成这些特性(characteristic)的默认值。但是这些特性究竟是干啥的,有什么影响,一直没有怎么弄清楚。

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

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

CONTAINS SQL 提供子程序使用数据的内在信息,这些特征值目前提供给服务器,并没有根据这些特征值来约束过程实际使用数据的情况,说白了就是没有使用的包括以下四种选择1.CONTAINS SQL表示子程序不包含读或者写数据的语句2.NO SQL 表示子程序不包含sql3.READS SQL DATA 表示子程序包含读数据的语句,但是不包含写数据的语句4.MODIFIES SQL DATA 表示子程序包含写数据的语句。

SQL SECURITY DEFINER 用来指定存储过程是使用创建者的许可来执行,还是执行者的许可来执行,默认值是DEFINERDEFINER 创建者的身份来调用,对于当前用户来说:如果执行存储过程的权限,且创建者有访问表的权限,当前用户可以成功执行过程的调用的说白了就是当前用户调用存储过程,存储过程执行的具体操作是借助定义存储过程的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了,结尾的标记而已)

linuxMySQL存储过程定义中的特性(characteristic)的含义

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

通常在使用图形界面工具进行存储过程编写的时候,图形界面工具会自动加上这部分内容比,如用HeidiSQL创建存储过程的时候,会自动生成这些特性(characteristic)的默认值。但是这些特性究竟是干啥的,有什么影响,一直没有怎么弄清楚。

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

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

CONTAINS SQL 提供子程序使用数据的内在信息,这些特征值目前提供给服务器,并没有根据这些特征值来约束过程实际使用数据的情况,说白了就是没有使用的包括以下四种选择1.CONTAINS SQL表示子程序不包含读或者写数据的语句2.NO SQL 表示子程序不包含sql3.READS SQL DATA 表示子程序包含读数据的语句,但是不包含写数据的语句4.MODIFIES SQL DATA 表示子程序包含写数据的语句。

SQL SECURITY DEFINER 用来指定存储过程是使用创建者的许可来执行,还是执行者的许可来执行,默认值是DEFINERDEFINER 创建者的身份来调用,对于当前用户来说:如果执行存储过程的权限,且创建者有访问表的权限,当前用户可以成功执行过程的调用的说白了就是当前用户调用存储过程,存储过程执行的具体操作是借助定义存储过程的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了,结尾的标记而已)

linux

3.

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

通常在使用图形界面工具进行存储过程编写的时候,图形界面工具会自动加上这部分内容比,如用HeidiSQL创建存储过程的时候,会自动生成这些特性(characteristic)的默认值。但是这些特性究竟是干啥的,有什么影响,一直没有怎么弄清楚。

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

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

CONTAINS SQL 提供子程序使用数据的内在信息,这些特征值目前提供给服务器,并没有根据这些特征值来约束过程实际使用数据的情况,说白了就是没有使用的包括以下四种选择1.CONTAINS SQL表示子程序不包含读或者写数据的语句2.NO SQL 表示子程序不包含sql3.READS SQL DATA 表示子程序包含读数据的语句,但是不包含写数据的语句4.MODIFIES SQL DATA 表示子程序包含写数据的语句。

SQL SECURITY DEFINER 用来指定存储过程是使用创建者的许可来执行,还是执行者的许可来执行,默认值是DEFINERDEFINER 创建者的身份来调用,对于当前用户来说:如果执行存储过程的权限,且创建者有访问表的权限,当前用户可以成功执行过程的调用的说白了就是当前用户调用存储过程,存储过程执行的具体操作是借助定义存储过程的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了,结尾的标记而已)

linux

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

通常在使用图形界面工具进行存储过程编写的时候,图形界面工具会自动加上这部分内容比,如用HeidiSQL创建存储过程的时候,会自动生成这些特性(characteristic)的默认值。但是这些特性究竟是干啥的,有什么影响,一直没有怎么弄清楚。

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

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

CONTAINS SQL 提供子程序使用数据的内在信息,这些特征值目前提供给服务器,并没有根据这些特征值来约束过程实际使用数据的情况,说白了就是没有使用的包括以下四种选择1.CONTAINS SQL表示子程序不包含读或者写数据的语句2.NO SQL 表示子程序不包含sql3.READS SQL DATA 表示子程序包含读数据的语句,但是不包含写数据的语句4.MODIFIES SQL DATA 表示子程序包含写数据的语句。

SQL SECURITY DEFINER 用来指定存储过程是使用创建者的许可来执行,还是执行者的许可来执行,默认值是DEFINERDEFINER 创建者的身份来调用,对于当前用户来说:如果执行存储过程的权限,且创建者有访问表的权限,当前用户可以成功执行过程的调用的说白了就是当前用户调用存储过程,存储过程执行的具体操作是借助定义存储过程的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了,结尾的标记而已)

linux

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

通常在使用图形界面工具进行存储过程编写的时候,图形界面工具会自动加上这部分内容比,如用HeidiSQL创建存储过程的时候,会自动生成这些特性(characteristic)的默认值。但是这些特性究竟是干啥的,有什么影响,一直没有怎么弄清楚。

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

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

CONTAINS SQL 提供子程序使用数据的内在信息,这些特征值目前提供给服务器,并没有根据这些特征值来约束过程实际使用数据的情况,说白了就是没有使用的包括以下四种选择1.CONTAINS SQL表示子程序不包含读或者写数据的语句2.NO SQL 表示子程序不包含sql3.READS SQL DATA 表示子程序包含读数据的语句,但是不包含写数据的语句4.MODIFIES SQL DATA 表示子程序包含写数据的语句。

SQL SECURITY DEFINER 用来指定存储过程是使用创建者的许可来执行,还是执行者的许可来执行,默认值是DEFINERDEFINER 创建者的身份来调用,对于当前用户来说:如果执行存储过程的权限,且创建者有访问表的权限,当前用户可以成功执行过程的调用的说白了就是当前用户调用存储过程,存储过程执行的具体操作是借助定义存储过程的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了,结尾的标记而已)

linux

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

通常在使用图形界面工具进行存储过程编写的时候,图形界面工具会自动加上这部分内容比,如用HeidiSQL创建存储过程的时候,会自动生成这些特性(characteristic)的默认值。但是这些特性究竟是干啥的,有什么影响,一直没有怎么弄清楚。

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

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

CONTAINS SQL 提供子程序使用数据的内在信息,这些特征值目前提供给服务器,并没有根据这些特征值来约束过程实际使用数据的情况,说白了就是没有使用的包括以下四种选择1.CONTAINS SQL表示子程序不包含读或者写数据的语句2.NO SQL 表示子程序不包含sql3.READS SQL DATA 表示子程序包含读数据的语句,但是不包含写数据的语句4.MODIFIES SQL DATA 表示子程序包含写数据的语句。

SQL SECURITY DEFINER 用来指定存储过程是使用创建者的许可来执行,还是执行者的许可来执行,默认值是DEFINERDEFINER 创建者的身份来调用,对于当前用户来说:如果执行存储过程的权限,且创建者有访问表的权限,当前用户可以成功执行过程的调用的说白了就是当前用户调用存储过程,存储过程执行的具体操作是借助定义存储过程的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了,结尾的标记而已)

linux

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

通常在使用图形界面工具进行存储过程编写的时候,图形界面工具会自动加上这部分内容比,如用HeidiSQL创建存储过程的时候,会自动生成这些特性(characteristic)的默认值。但是这些特性究竟是干啥的,有什么影响,一直没有怎么弄清楚。

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

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

CONTAINS SQL 提供子程序使用数据的内在信息,这些特征值目前提供给服务器,并没有根据这些特征值来约束过程实际使用数据的情况,说白了就是没有使用的包括以下四种选择1.CONTAINS SQL表示子程序不包含读或者写数据的语句2.NO SQL 表示子程序不包含sql3.READS SQL DATA 表示子程序包含读数据的语句,但是不包含写数据的语句4.MODIFIES SQL DATA 表示子程序包含写数据的语句。

SQL SECURITY DEFINER 用来指定存储过程是使用创建者的许可来执行,还是执行者的许可来执行,默认值是DEFINERDEFINER 创建者的身份来调用,对于当前用户来说:如果执行存储过程的权限,且创建者有访问表的权限,当前用户可以成功执行过程的调用的说白了就是当前用户调用存储过程,存储过程执行的具体操作是借助定义存储过程的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了,结尾的标记而已)

linuxMySQL存储过程定义中的特性(characteristic)的含义

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

通常在使用图形界面工具进行存储过程编写的时候,图形界面工具会自动加上这部分内容比,如用HeidiSQL创建存储过程的时候,会自动生成这些特性(characteristic)的默认值。但是这些特性究竟是干啥的,有什么影响,一直没有怎么弄清楚。

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

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

CONTAINS SQL 提供子程序使用数据的内在信息,这些特征值目前提供给服务器,并没有根据这些特征值来约束过程实际使用数据的情况,说白了就是没有使用的包括以下四种选择1.CONTAINS SQL表示子程序不包含读或者写数据的语句2.NO SQL 表示子程序不包含sql3.READS SQL DATA 表示子程序包含读数据的语句,但是不包含写数据的语句4.MODIFIES SQL DATA 表示子程序包含写数据的语句。

SQL SECURITY DEFINER 用来指定存储过程是使用创建者的许可来执行,还是执行者的许可来执行,默认值是DEFINERDEFINER 创建者的身份来调用,对于当前用户来说:如果执行存储过程的权限,且创建者有访问表的权限,当前用户可以成功执行过程的调用的说白了就是当前用户调用存储过程,存储过程执行的具体操作是借助定义存储过程的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了,结尾的标记而已)

linuxMySQL存储过程定义中的特性(characteristic)的含义

4.MySQL存储过程定义中的特性(characteristic)的含义。

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

通常在使用图形界面工具进行存储过程编写的时候,图形界面工具会自动加上这部分内容比,如用HeidiSQL创建存储过程的时候,会自动生成这些特性(characteristic)的默认值。但是这些特性究竟是干啥的,有什么影响,一直没有怎么弄清楚。

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

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

CONTAINS SQL 提供子程序使用数据的内在信息,这些特征值目前提供给服务器,并没有根据这些特征值来约束过程实际使用数据的情况,说白了就是没有使用的包括以下四种选择1.CONTAINS SQL表示子程序不包含读或者写数据的语句2.NO SQL 表示子程序不包含sql3.READS SQL DATA 表示子程序包含读数据的语句,但是不包含写数据的语句4.MODIFIES SQL DATA 表示子程序包含写数据的语句。

SQL SECURITY DEFINER 用来指定存储过程是使用创建者的许可来执行,还是执行者的许可来执行,默认值是DEFINERDEFINER 创建者的身份来调用,对于当前用户来说:如果执行存储过程的权限,且创建者有访问表的权限,当前用户可以成功执行过程的调用的说白了就是当前用户调用存储过程,存储过程执行的具体操作是借助定义存储过程的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了,结尾的标记而已)

linux

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

通常在使用图形界面工具进行存储过程编写的时候,图形界面工具会自动加上这部分内容比,如用HeidiSQL创建存储过程的时候,会自动生成这些特性(characteristic)的默认值。但是这些特性究竟是干啥的,有什么影响,一直没有怎么弄清楚。

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

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

CONTAINS SQL 提供子程序使用数据的内在信息,这些特征值目前提供给服务器,并没有根据这些特征值来约束过程实际使用数据的情况,说白了就是没有使用的包括以下四种选择1.CONTAINS SQL表示子程序不包含读或者写数据的语句2.NO SQL 表示子程序不包含sql3.READS SQL DATA 表示子程序包含读数据的语句,但是不包含写数据的语句4.MODIFIES SQL DATA 表示子程序包含写数据的语句。

SQL SECURITY DEFINER 用来指定存储过程是使用创建者的许可来执行,还是执行者的许可来执行,默认值是DEFINERDEFINER 创建者的身份来调用,对于当前用户来说:如果执行存储过程的权限,且创建者有访问表的权限,当前用户可以成功执行过程的调用的说白了就是当前用户调用存储过程,存储过程执行的具体操作是借助定义存储过程的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了,结尾的标记而已)

linux

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

通常在使用图形界面工具进行存储过程编写的时候,图形界面工具会自动加上这部分内容比,如用HeidiSQL创建存储过程的时候,会自动生成这些特性(characteristic)的默认值。但是这些特性究竟是干啥的,有什么影响,一直没有怎么弄清楚。

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

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

CONTAINS SQL 提供子程序使用数据的内在信息,这些特征值目前提供给服务器,并没有根据这些特征值来约束过程实际使用数据的情况,说白了就是没有使用的包括以下四种选择1.CONTAINS SQL表示子程序不包含读或者写数据的语句2.NO SQL 表示子程序不包含sql3.READS SQL DATA 表示子程序包含读数据的语句,但是不包含写数据的语句4.MODIFIES SQL DATA 表示子程序包含写数据的语句。

SQL SECURITY DEFINER 用来指定存储过程是使用创建者的许可来执行,还是执行者的许可来执行,默认值是DEFINERDEFINER 创建者的身份来调用,对于当前用户来说:如果执行存储过程的权限,且创建者有访问表的权限,当前用户可以成功执行过程的调用的说白了就是当前用户调用存储过程,存储过程执行的具体操作是借助定义存储过程的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了,结尾的标记而已)

linux

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

通常在使用图形界面工具进行存储过程编写的时候,图形界面工具会自动加上这部分内容比,如用HeidiSQL创建存储过程的时候,会自动生成这些特性(characteristic)的默认值。但是这些特性究竟是干啥的,有什么影响,一直没有怎么弄清楚。

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

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

CONTAINS SQL 提供子程序使用数据的内在信息,这些特征值目前提供给服务器,并没有根据这些特征值来约束过程实际使用数据的情况,说白了就是没有使用的包括以下四种选择1.CONTAINS SQL表示子程序不包含读或者写数据的语句2.NO SQL 表示子程序不包含sql3.READS SQL DATA 表示子程序包含读数据的语句,但是不包含写数据的语句4.MODIFIES SQL DATA 表示子程序包含写数据的语句。

SQL SECURITY DEFINER 用来指定存储过程是使用创建者的许可来执行,还是执行者的许可来执行,默认值是DEFINERDEFINER 创建者的身份来调用,对于当前用户来说:如果执行存储过程的权限,且创建者有访问表的权限,当前用户可以成功执行过程的调用的说白了就是当前用户调用存储过程,存储过程执行的具体操作是借助定义存储过程的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了,结尾的标记而已)

linux

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

通常在使用图形界面工具进行存储过程编写的时候,图形界面工具会自动加上这部分内容比,如用HeidiSQL创建存储过程的时候,会自动生成这些特性(characteristic)的默认值。但是这些特性究竟是干啥的,有什么影响,一直没有怎么弄清楚。

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

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

CONTAINS SQL 提供子程序使用数据的内在信息,这些特征值目前提供给服务器,并没有根据这些特征值来约束过程实际使用数据的情况,说白了就是没有使用的包括以下四种选择1.CONTAINS SQL表示子程序不包含读或者写数据的语句2.NO SQL 表示子程序不包含sql3.READS SQL DATA 表示子程序包含读数据的语句,但是不包含写数据的语句4.MODIFIES SQL DATA 表示子程序包含写数据的语句。

SQL SECURITY DEFINER 用来指定存储过程是使用创建者的许可来执行,还是执行者的许可来执行,默认值是DEFINERDEFINER 创建者的身份来调用,对于当前用户来说:如果执行存储过程的权限,且创建者有访问表的权限,当前用户可以成功执行过程的调用的说白了就是当前用户调用存储过程,存储过程执行的具体操作是借助定义存储过程的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了,结尾的标记而已)

linuxMySQL存储过程定义中的特性(characteristic)的含义MySQL存储过程定义中的特性(characteristic)的含义

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

通常在使用图形界面工具进行存储过程编写的时候,图形界面工具会自动加上这部分内容比,如用HeidiSQL创建存储过程的时候,会自动生成这些特性(characteristic)的默认值。但是这些特性究竟是干啥的,有什么影响,一直没有怎么弄清楚。

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

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

CONTAINS SQL 提供子程序使用数据的内在信息,这些特征值目前提供给服务器,并没有根据这些特征值来约束过程实际使用数据的情况,说白了就是没有使用的包括以下四种选择1.CONTAINS SQL表示子程序不包含读或者写数据的语句2.NO SQL 表示子程序不包含sql3.READS SQL DATA 表示子程序包含读数据的语句,但是不包含写数据的语句4.MODIFIES SQL DATA 表示子程序包含写数据的语句。

SQL SECURITY DEFINER 用来指定存储过程是使用创建者的许可来执行,还是执行者的许可来执行,默认值是DEFINERDEFINER 创建者的身份来调用,对于当前用户来说:如果执行存储过程的权限,且创建者有访问表的权限,当前用户可以成功执行过程的调用的说白了就是当前用户调用存储过程,存储过程执行的具体操作是借助定义存储过程的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了,结尾的标记而已)

linuxMySQL存储过程定义中的特性(characteristic)的含义

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

通常在使用图形界面工具进行存储过程编写的时候,图形界面工具会自动加上这部分内容比,如用HeidiSQL创建存储过程的时候,会自动生成这些特性(characteristic)的默认值。但是这些特性究竟是干啥的,有什么影响,一直没有怎么弄清楚。

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

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

CONTAINS SQL 提供子程序使用数据的内在信息,这些特征值目前提供给服务器,并没有根据这些特征值来约束过程实际使用数据的情况,说白了就是没有使用的包括以下四种选择1.CONTAINS SQL表示子程序不包含读或者写数据的语句2.NO SQL 表示子程序不包含sql3.READS SQL DATA 表示子程序包含读数据的语句,但是不包含写数据的语句4.MODIFIES SQL DATA 表示子程序包含写数据的语句。

SQL SECURITY DEFINER 用来指定存储过程是使用创建者的许可来执行,还是执行者的许可来执行,默认值是DEFINERDEFINER 创建者的身份来调用,对于当前用户来说:如果执行存储过程的权限,且创建者有访问表的权限,当前用户可以成功执行过程的调用的说白了就是当前用户调用存储过程,存储过程执行的具体操作是借助定义存储过程的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了,结尾的标记而已)

linuxMySQL存储过程定义中的特性(characteristic)的含义。pt平台老虎机

展开全文
相关文章
任天堂国际

MySQL存储过程定义中的特性(characteristic)的含义

吉祥三公

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

多人21点

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

通常在使用图形界面工具进行存储过程编写的时候,图形界面工具会自动加上这部分内容比,如用HeidiSQL创建存储过程的时候,会自动生成这些特性(characteristic)的默认值。但是这些特性究竟是干啥的,有什么影响,一直没有怎么弄清楚。

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

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

CONTAINS SQL 提供子程序使用数据的内在信息,这些特征值目前提供给服务器,并没有根据这些特征值来约束过程实际使用数据的情况,说白了就是没有使用的包括以下四种选择1.CONTAINS SQL表示子程序不包含读或者写数据的语句2.NO SQL 表示子程序不包含sql3.READS SQL DATA 表示子程序包含读数据的语句,但是不包含写数据的语句4.MODIFIES SQL DATA 表示子程序包含写数据的语句。

SQL SECURITY DEFINER 用来指定存储过程是使用创建者的许可来执行,还是执行者的许可来执行,默认值是DEFINERDEFINER 创建者的身份来调用,对于当前用户来说:如果执行存储过程的权限,且创建者有访问表的权限,当前用户可以成功执行过程的调用的说白了就是当前用户调用存储过程,存储过程执行的具体操作是借助定义存储过程的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了,结尾的标记而已)

linux....

pt老虎机电脑版

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

太阳城申博

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

通常在使用图形界面工具进行存储过程编写的时候,图形界面工具会自动加上这部分内容比,如用HeidiSQL创建存储过程的时候,会自动生成这些特性(characteristic)的默认值。但是这些特性究竟是干啥的,有什么影响,一直没有怎么弄清楚。

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

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

CONTAINS SQL 提供子程序使用数据的内在信息,这些特征值目前提供给服务器,并没有根据这些特征值来约束过程实际使用数据的情况,说白了就是没有使用的包括以下四种选择1.CONTAINS SQL表示子程序不包含读或者写数据的语句2.NO SQL 表示子程序不包含sql3.READS SQL DATA 表示子程序包含读数据的语句,但是不包含写数据的语句4.MODIFIES SQL DATA 表示子程序包含写数据的语句。

SQL SECURITY DEFINER 用来指定存储过程是使用创建者的许可来执行,还是执行者的许可来执行,默认值是DEFINERDEFINER 创建者的身份来调用,对于当前用户来说:如果执行存储过程的权限,且创建者有访问表的权限,当前用户可以成功执行过程的调用的说白了就是当前用户调用存储过程,存储过程执行的具体操作是借助定义存储过程的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了,结尾的标记而已)

linux....

相关资讯
太阳城申博

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

通常在使用图形界面工具进行存储过程编写的时候,图形界面工具会自动加上这部分内容比,如用HeidiSQL创建存储过程的时候,会自动生成这些特性(characteristic)的默认值。但是这些特性究竟是干啥的,有什么影响,一直没有怎么弄清楚。

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

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

CONTAINS SQL 提供子程序使用数据的内在信息,这些特征值目前提供给服务器,并没有根据这些特征值来约束过程实际使用数据的情况,说白了就是没有使用的包括以下四种选择1.CONTAINS SQL表示子程序不包含读或者写数据的语句2.NO SQL 表示子程序不包含sql3.READS SQL DATA 表示子程序包含读数据的语句,但是不包含写数据的语句4.MODIFIES SQL DATA 表示子程序包含写数据的语句。

SQL SECURITY DEFINER 用来指定存储过程是使用创建者的许可来执行,还是执行者的许可来执行,默认值是DEFINERDEFINER 创建者的身份来调用,对于当前用户来说:如果执行存储过程的权限,且创建者有访问表的权限,当前用户可以成功执行过程的调用的说白了就是当前用户调用存储过程,存储过程执行的具体操作是借助定义存储过程的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了,结尾的标记而已)

linux....

手机网投网址

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

通常在使用图形界面工具进行存储过程编写的时候,图形界面工具会自动加上这部分内容比,如用HeidiSQL创建存储过程的时候,会自动生成这些特性(characteristic)的默认值。但是这些特性究竟是干啥的,有什么影响,一直没有怎么弄清楚。

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

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

CONTAINS SQL 提供子程序使用数据的内在信息,这些特征值目前提供给服务器,并没有根据这些特征值来约束过程实际使用数据的情况,说白了就是没有使用的包括以下四种选择1.CONTAINS SQL表示子程序不包含读或者写数据的语句2.NO SQL 表示子程序不包含sql3.READS SQL DATA 表示子程序包含读数据的语句,但是不包含写数据的语句4.MODIFIES SQL DATA 表示子程序包含写数据的语句。

SQL SECURITY DEFINER 用来指定存储过程是使用创建者的许可来执行,还是执行者的许可来执行,默认值是DEFINERDEFINER 创建者的身份来调用,对于当前用户来说:如果执行存储过程的权限,且创建者有访问表的权限,当前用户可以成功执行过程的调用的说白了就是当前用户调用存储过程,存储过程执行的具体操作是借助定义存储过程的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了,结尾的标记而已)

linux....

云博国际

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

通常在使用图形界面工具进行存储过程编写的时候,图形界面工具会自动加上这部分内容比,如用HeidiSQL创建存储过程的时候,会自动生成这些特性(characteristic)的默认值。但是这些特性究竟是干啥的,有什么影响,一直没有怎么弄清楚。

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

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

CONTAINS SQL 提供子程序使用数据的内在信息,这些特征值目前提供给服务器,并没有根据这些特征值来约束过程实际使用数据的情况,说白了就是没有使用的包括以下四种选择1.CONTAINS SQL表示子程序不包含读或者写数据的语句2.NO SQL 表示子程序不包含sql3.READS SQL DATA 表示子程序包含读数据的语句,但是不包含写数据的语句4.MODIFIES SQL DATA 表示子程序包含写数据的语句。

SQL SECURITY DEFINER 用来指定存储过程是使用创建者的许可来执行,还是执行者的许可来执行,默认值是DEFINERDEFINER 创建者的身份来调用,对于当前用户来说:如果执行存储过程的权限,且创建者有访问表的权限,当前用户可以成功执行过程的调用的说白了就是当前用户调用存储过程,存储过程执行的具体操作是借助定义存储过程的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了,结尾的标记而已)

linux....

热门资讯