位置: 编程技术 - 正文

理解MySQL存储过程和函数(mysql的存储过程怎么理解)

编辑:rootadmin

推荐整理分享理解MySQL存储过程和函数(mysql的存储过程怎么理解),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:mysql8.0存储过程,mysql的存储过程保存在哪里,mysql存储过程菜鸟教程,mysql的存储过程怎么理解,mysql的存储过程怎么理解,mysql8.0存储过程,mysql存储过程菜鸟教程,mysql存储过程菜鸟教程,内容如对您有帮助,希望把文章链接给更多的朋友!

一、概述

一提到存储过程可能就会引出另一个话题就是存储过程的优缺点,这里也不做讨论,一般别人问我我就这样回答你觉得它好你就用它。因为mysql中存储过程和函数的语法非常接近所以就放在一起,主要区别就是函数必须有返回值(return),并且函数的参数只有IN类型而存储过程有IN、OUT、INOUT这三种类型。

二、语法

创建存储过程和函数语法

语法来自官方自带的参考手册,characteristic语法块是需要注意的地方,先用一个例子来介绍。

例子:

语法解释:

在创建存储过程的时候一般都会用DELIMITER$$.....END$$ DELIMITER ;放在开头和结束,目的就是避免mysql把存储过程内部的";"解释成结束符号,最后通过“DELIMITER ;”来告知存储过程结束。

主要解释characteristic部分:

LANGUAGE SQL:用来说明语句部分是SQL语句,未来可能会支持其它类型的语句。

[NOT] DETERMINISTIC:如果程序或线程总是对同样的输入参数产生同样的结果,则被认为它是“确定的”,否则就是“非确定”的。如果既没有给定DETERMINISTIC也没有给定NOT DETERMINISTIC,默认的就是NOT DETERMINISTIC(非确定的)CONTAINS SQL:表示子程序不包含读或写数据的语句。

NO SQL:表示子程序不包含SQL语句。

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

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

SQL SECURITY DEFINER:表示执行存储过程中的程序是由创建该存储过程的用户的权限来执行。

SQL SECURITY INVOKER:表示执行存储过程中的程序是由调用该存储过程的用户的权限来执行。(例如上面的存储过程我写的是由调用该存储过程的用户的权限来执行,当前存储过程是用来查询Employee表,如果我当前执行存储过程的用户没有查询Employee表的权限那么就会返回权限不足的错误,如果换成DEFINER如果存储过程是由ROOT用户创建那么任何一个用户登入调用存储过程都可以执行,因为执行存储过程的权限变成了root)

COMMENT 'string':备注,和创建表的字段备注一样。

理解MySQL存储过程和函数(mysql的存储过程怎么理解)

注意:在编写存储过程和函数时建议明确指定上面characteristic部分的状态,特别是存在复制的环境中,如果创建函数不明确指定这些状态会报错,从一个非复制环境将带函数的数据库迁移到复制环境的机器上如果没有明确指定DETERMINISTIC, NO SQL, or READS SQL DATA该三个状态也会报错。

报错示例

Error Code: . This function has none of DETERMINISTIC, NO SQL, or READS SQL DATA in its declaration and binary logging is enabled (you *might* want to use the less safe log_bin_trust_function_creators variable)这个报错就是上面注意部分说的问题。原来是因为在主从复制的两台MySQL服务器中开启了二进制日志选项log-bin,slave会从master复制数据,而一些操作,比如function所得的结果在master和slave上可能不同,所以存在潜在的安全隐患。因此,在默认情况下回阻止function的创建。

解决办法有两种:

1.将log_bin_trust_function_creators参数设置为ON,这样一来开启了log-bin的MySQL Server便可以随意创建function。这里存在潜在的数据安全问题,除非明确的知道创建的function在master和slave上的行为完全一致。 设置该参数可以用动态的方式或者指定该参数来启动数据库服务器或者修改配置文件后重启服务器。需注意的是,动态设置的方式会在服务器重启后失效。

另外如果是在master上创建函数,想通过主从复制的方式将函数复制到slave上则也需在开启了log-bin的slave中设置上述变量的值为ON(变量的设置不会从master复制到slave上,这点需要注意),否则主从复制会报错。

2.明确指明函数的类型 1 )、DETERMINISTIC 不确定的 2 )、NO SQL 没有SQl语句,当然也不会修改数据 3 )、READS SQL DATA 只是读取数据,当然也不会修改数据比如:CREATE DEFINER=`username`@`%` READS SQL DATA FUNCTION `fn_getitemclock`(i_itemid bigint,i_clock int,i_pos int) RETURNS int()...这样一来相当于明确的告知MySQL服务器这个函数不会修改数据,因此可以在开启了log-bin的服务器上安全的创建并被复制到开启了log-bin的slave上。

修改存储过程函数语法

删除存储过程函数语法

查看存储过程和函数

1.查看存储过程状态

2.查看存储过程和函数的创建语法

3.查看存储过程和函数详细信息

总结

存储过程和函数语法不难理解,但是往往存储过程中不单单只包含这种简单的查询语法,还会嵌套循环语句、变量、报错处理、事务等,下一篇文章会单独讲变量,将变量的知识加入到存储过程,包括变量的声明和报错处理,欢迎关注。

MySQL使用游标批量处理进行表操作 一、概述本章节介绍使用游标来批量进行表操作,包括批量添加索引、批量添加字段等。如果对存储过程、变量定义、预处理还不是很熟悉先阅读我前

窥探mysql存储过程细节 存储过程,可以这样认为,将我们需要特殊处理的sql语句封装成函数,当需要的时候我们只需调用这个函数就可以实现我们想要的操作,这个过程我们

Mac 安装和卸载 Mysql5.7. 的方法 安装去

标签: mysql的存储过程怎么理解

本文链接地址:https://www.jiuchutong.com/biancheng/319774.html 转载请保留说明!

上一篇:理解Mysql prepare预处理语句(理解的近义词)

下一篇:MySQL使用游标批量处理进行表操作(mysql中游标的作用)

  • 如何做进项税额转出,又认证不了发票
  • 计提生产车间工人和车间管理人员工资
  • 材料按实际成本计价时发出成本的计算方法有
  • 公积金贷款金额少怎么办
  • 印花税缴款怎么用银行卡支付
  • 合并报表成本法和权益法区别
  • 季度的工会经费计税依据
  • 发现账实不符,第一件事就是要干嘛?
  • 销售材料应确认的损益是什么意思
  • 商品房的销售方式有哪些
  • 红字发票怎么勾选认证
  • 对公账户的理财收入计入什么科目
  • 人力资源外包服务规范
  • 母子公司可以开具资金占用费
  • 管理费用月末怎么结账
  • 小规模纳税人企业所得税怎么计算
  • 纳税人开具发票服务卡到期限了怎么办?
  • 增值税专用发票抵扣期限
  • 工程项目分包需要缴纳企业所得税吗
  • 房地产企业土地增值税清算案例
  • 集团内部股权无偿划转引起资本公积增加需要印花税
  • 企业的业务招待费多了好还是少了好
  • 竣工决算调整入库流程
  • 税控专用设备全称是什么
  • 如何彻底清洁
  • 在win7系统中怎样为另外一块硬盘安装系统
  • 调整以前年度所得税汇算清缴报表,在哪调减虚增的成本
  • 民法典对知识产权的定义
  • 内含报酬率概念
  • 系统安装工具有什么用
  • 研发费用没有发票可以加计扣除吗
  • 销售额是否含税?
  • php语言版本
  • php curl_multi_init
  • 销售使用过的固定资产3%减按2%
  • 增值税加计抵减企业所得税如何处理
  • 【深度学习时间序列预测案例】零基础入门经典深度学习时间序列预测项目实战(附代码+数据集+原理介绍)
  • css基础入门
  • 小规模申请一般纳税人的条件
  • 内账的账务处理
  • 存货是指企业在生产经营过程中为销售或耗用
  • 一般纳税人每月开票不能超过多少
  • 补缴上一年度社保
  • 开发成本期末有余额吗
  • 房地产开发成本和房地产开发产品
  • 先收票后收货
  • 增值税未开票收入
  • 收到货款会计录入
  • 银行开手续费发票怎么做账
  • 缴纳工会经费的依据
  • 装修公司开劳务费怎么选择税控编码
  • 经纪代理代订机票差额专票抵扣
  • 房产公司销售成本怎么算
  • 待摊费用和预提费用的区别
  • 深度解析天梁坐命
  • window怎么操作
  • windows7禁用usb
  • wwSecure.exe - wwSecure是什么进程
  • pps是什么文件
  • linux重启shell
  • win8 应用商店
  • win7系统自动弹出搜索框
  • iptables centos
  • iptables -l -n
  • Coroutine couldn't be started because the the game object 'GameController' is inactive!
  • ugui scrollview
  • 将txt文件名批量导入excel
  • unity3d怎么样
  • Nodejs事件循环机制图解
  • pythonlist排序算法
  • unity只执行一次的方法
  • android studio报错
  • androidstudio offline
  • 对税务工作提出意见建议
  • 网上跨区预缴
  • 吉林省地方税务局单位职工集资建房免征营业税
  • 国家税务局大数据局
  • 干部任免审批表怎么填写
  • 于开年 山东省国家税务局
  • 如何用微信进行社保认证
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设