create procedure用来创建 存储过程 ,create function用来创建 函数
Delimiter命令是改变语句的结束符 ,MySQL默认的结束符为;号,由于procedure和function中的;号并不代表创建的结束,所以要替换成另外的结束符以便表示创建的结束
rontine_body子句可以包含一个简单的SQL语句,也可以包含多个SQL语句, 通过begin...end将这多个SQL语句 包含在一起
MySQL存储过程和函数中也可以包含类似create和drop等DDL语句
comment子句用来写入对存储过程和函数的注释
Language子句用来表示此存储过程和函数的创建语言
存储过程和函数被标注为deterministic表明当输入相同的参数是会返回相同的结果,反之如果是not deterministic则表示相同参数不会是相同结果,默认是not deterministic
相关属性短语只有咨询含义,并不是强制性的约束
Drop procedure/function语句用来 删除指定名称的存储过程或函数
Begin...end语句通常出现在存储过程、函数和触发器中,其中 可以包含一个或多个语句 ,每个语句用;号隔开
标签label可以加在begin...end语句以及loop, repeat和while语句
语句中通过iterate和leave来控制流程,iterate表示返回指定标签位置,leave表示跳出标签
Declare语句通常用来声明本地变量、游标、条件或者handler
Declare语句只允许出现在begin ... end语句中而且必须出现在第一行
Declare的顺序也有要求,通常是先声明本地变量,再是游标,然后是条件和handler
本地变量可以通过declare语句进行声明
声明后的变量可以通过select ... into var_list进行赋值,或者通过set语句赋值,或者通过定义游标并使用fetch ... into var_list赋值
通过declare声明变量方法:
MySQL支持if,case,iterate,leave,loop,while,repeat语句作为存储过程和函数中的 流程控制语句 ,另外return语句也是函数中的特定流程控制语句
Case语句在存储过程或函数中表明了 复杂的条件选择语句
IF语句在存储过程或函数中表明了 基础的条件选择语句
其中在 function 里面,只有 DETERMINISTIC, NO SQL 和 READS SQL DATA 被支持.如果我们开启了 bin-log, 我们就必须为我们的 function 指定一个参数.
在 MySQL 中创建函数时出现这种错误的解决方法:
set global log_bin_trust_function_creators=TRUE;
Iterate语句 仅出现在loop,repeat,while循环语句中,其含义表示重新开始此循环
Leave语句表明 退出指定标签的流程控制语句块
通常会用在begin...end,以及loop,repeat,while的循环语句中
Loop语句是存储过程或函数中表达 循环执行 的一种方式
repeat语句是存储过程或函数中表达 循环执行 的一种方式
while语句是存储过程或函数中表达 循环执行 的一种方式
Return语句用在 函数中,用来终结函数的执行并将指定值返回给调用者
Cursor游标用来 声明一个数据集
游标的声明必须在变量和条件声明之后,在handler声明之前
Cursor close语句用来 关闭之前打开的游标
Cursor declare语句用来声明一个游标和指定游标对应的数据集合, 通常数据集合是一个select语句
Cursor fetch语句用来获取游标指定数据集的 下一行数据 并将各个字段值赋予后面的变量
Open cursor语句用来打开一个之前已经 声明好的游标
Declare condition语句命名 特定的错误条件 ,而该特定错误可以在declare...handler中指定 处理方法
个错误做特殊处理,可以用三种方法:
Declare handler语句用来声明一个handler来处理一个或多个特殊条件,当其中的某个条件满足时则触发其中的statement语句执行
Statement可以是一个简单SQL语句,也可以是begin...end组成的多个语句
Handler_action子句声明当执行完statement语句之后应该怎么办
Condition_value的值有以下几种:
当condition发生但没有声明handler时,则存储过程和函数依照如下规则处理
create trigger语句用来创建一个触发器,触发器的作用是当表上有对应SQL语句发生时,则触发执行
触发器创建时需要 指定对应的表名 tbl_name
Definer关键词用来指定trigger的安全环境
Trigger_time指定触发器的执行时间,BEFORE和AFTER指定触发器在表中的 每行数据修改前或者后 执行
Trigger_event指定触发该触发器的具体 事件
INSERT当新的一行数据插入表中时触发,比如通过执行insert,load data,replace语句插入新数据
UPDATE当表的一行数据被修改时触发,比如执行update语句时
DELETE当表的一行数据被删除时触发,比如执行delete,replace语句时
当执行insert into ... on duplicate key update语句时,当碰到重复行执行update时,则触发update下的触发器
Trigger_body表示触发器触发之后要执行的一个或多个语句,在内部可以引用涉及表的字段, OLD.col_name表示行数据被修改或删除之前的字段数据,NEW.col_name表示行数据被插入或修改之后的字段数据
Drop trigger语句用来 删除一个触发器
If exists短语用来避免删除不存在的触发器时引发报错
当你执行drop table时,表上的触发器也被drop掉了
是的.
数据库是依照某种数据模型组织起来并存放二级存储器中的数据集合.这种数据集合具有如下特点:尽可能不重复,以最优方式为某个特定组织的多种应用服务,其数据结构独立于使用它的应用程序,对数据的增、删、改和检索由统一软件进行管理和控制.从发展的历史看,数据库是数据管理的高级阶段,它是由文件管理系统发展起来的.
MySQL有多种存储引擎,每种存储引擎有各自的优缺点,可以择优选择使用:
MyISAM、InnoDB、MERGE、MEMORY(HEAP)、BDB(BerkeleyDB)、EXAMPLE、FEDERATED、ARCHIVE、CSV、BLACKHOLE.
MySQL支持数个存储引擎作为对不同表的类型的处理器.MySQL存储引擎包括处理事务安全表的引擎和处理非事务安全表的引擎:
- MyISAM管理非事务表.它提供高速存储和检索,以及全文搜索能力.MyISAM在所有MySQL配置里被支持,它是默认的存储引擎,除非你配置MySQL默认使用另外一个引擎.
- MEMORY存储引擎提供"内存中"表.MERGE存储引擎允许集合将被处理同样的MyISAM表作为一个单独的表.就像MyISAM一样,MEMORY和MERGE存储引擎处理非事务表,这两个引擎也都被默认包含在MySQL中.
mybatis调用mysql存储过程(返回参数,单结果集,多结果集)
注: RETCODE、RETDESC 这里的输出值不用在函数里 SELECT RETCODE; ,因为即使没有,当执行成功后会自动返回在对象里(Object/Map),所以在函数里不用SELECT一下了.
① 标注一二三四五处如果存在,则执行成功后返回结果如下
标注一对应结果1
只有结果1,对应的是标注三处的值.可以取出集合
函数p_duplicate_enroll
存储过程简单来说,就是为以后的使用而保存的一条或多条MySQL语句的集合.可将其视为批件,虽然它们的作用不仅限于批处理.
存储过程就是有业务逻辑和流程的集合,
可以在存储过程中创建表,更新数据,
删除等等.
你可以理解为用sql语句开发的一个
类和函数.
为什么要使用存储过程
通过把处理封装在容易使用的单元中,简化复杂的操作(正如前面例子所述).
由于不要求反复建立一系列处理步骤,这保证了数据的完整性.如果所有开发人员和应用程序都使用同一(试验和测试)存储过程,则所使用的代码都是相同的.这一点的延伸就是防止错误.需要执行的步骤越多,出错的可能性就越大.防止错误保证了数据的一致性.
简化对变动的管理.如果表名、列名或业务逻辑(或别的内容)有变化,只需要更改存储过程的代码.使用它的人员甚至不需要知道这些变化.
①.、存储过程定义:
存储过程是事先经过编译并存储在数据库中的一段 SQL 语句的集合,调用存储过程可以简化应用开发 人员的很多工作,减少数据在数据库和应用服务器之间的传输,对于提高数据处理的效率是有好处的. 存储过程思想上很简单,就是数据库 SQL 语言层面的代码封装与重用.
封装,复用 : 可以把某一业务SQL封装在存储过程中,需要用到 的时候直接调用即可.
可以接收参数,也可以返回数据 :再存储过程中,可以传递参数,也可以接收返回 值.
减少网络交互,效率提升 : 如果涉及到多条SQL,每执行一次都是一次网络传 输. 而如果封装在存储过程中,我们只需要网络交互一次可能就可以了.
(1)创建:
注意: 在命令行中,执行创建存储过程的SQL时,需要通过关键字 delimiter 指定SQL语句的 结束符.
以上就是土嘎嘎小编为大家整理的mysql怎么存储集合相关主题介绍,如果您觉得小编更新的文章只要能对粉丝们有用,就是我们最大的鼓励和动力,不要忘记讲本站分享给您身边的朋友哦!!