mysql创建存储过程

存储过程和函数

天涯浪子 提交于 2019-12-31 05:43:08
一、存储过程和函数简介 存储过程和函数是在数据库中定义一些SQL语句的集合,然后直接调用这些存储过程和函数来执行已经定义好的SQL语句。存储过程和函数可以避免开发人员重复的编写相同的SQL语句。而且,存储过程和函数是在MySQL服务器中存储和执行的,可以减少客户端和服务器端的数据传输。 二、MySQL存储过程 一.创建存储过程 create procedure sp_name() begin ......... end 二.调用存储过程 1.基本语法:call sp_name() 注意:存储过程名称后面必须加括号,哪怕该存储过程没有参数传递 三.删除存储过程 1.基本语法: drop procedure sp_name; 2.注意事项 (1)不能在一个存储过程中删除另一个存储过程,只能调用另一个存储过程 四.其他常用命令 1.show procedure status 显示数据库中所有存储的存储过程基本信息,包括所属数据库,存储过程名称,创建时间等 2.show create procedure sp_name 显示某一个mysql存储过程的详细信息 mysql存储过程的参数用在存储过程的定义,共有三种参数类型,IN,OUT,INOUT Create procedure|function([[IN |OUT |INOUT ] 参数名 数据类形...]) IN 输入参数

Mysql中的存储过程

偶尔善良 提交于 2019-12-28 19:55:41
什么是存储过程 简单的说,就是一组SQL语句集,功能强大,可以实现一些比较复杂的逻辑功能,类似于JAVA语言中的方法; ps:存储过程跟触发器有点类似,都是一组SQL集,但是存储过程是主动调用的,且功能比触发器更加强大,触发器是某件事触发后自动调用; 有哪些特性 有输入输出参数,可以声明变量,有if/else, case,while等控制语句,通过编写存储过程,可以实现复杂的逻辑功能; 函数的普遍特性:模块化,封装,代码复用; 速度快,只有首次执行需经过编译和优化步骤,后续被调用可以直接执行,省去以上步骤; 创建一个简单的存储过程 存储过程proc_adder功能很简单,两个整型输入参数a和b,一个整型输出参数sum,功能就是计算输入参数a和b的结果,赋值给输出参数sum; 几点说明: DELIMITER ;;:之前说过了,把默认的输入的结束符;替换成;;。 DEFINER:创建者; -- ---------------------------- -- Procedure structure for `proc_adder` -- ---------------------------- DROP PROCEDURE IF EXISTS `proc_adder`; DELIMITER ;; CREATE DEFINER=`root`@`localhost` PROCEDURE

MySQL存储过程的创建及调用

≯℡__Kan透↙ 提交于 2019-12-28 19:55:24
阅读目录: MySQL存储过程_创建-调用-参数 存储过程:SQL中的“脚本”     1. 创建存储过程     2. 调用存储过程     3. 存储过程体     4. 语句块标签 存储过程的参数     1. in :向过程里传参     2. out :过程向外传参值     3. inout :in and out # SQL语句:先编译后执行 存储过程(Stored Procedure):   一组可编程的函数,是为了完成特定功能的SQL语句集,经编译创建并保存在数据库中,用户可通过指定存储过程的名字并给定参数(需要时)来调用执行。 优点 ( 为什么要用存储过程? ):   ①将重复性很高的一些操作,封装到一个存储过程中,简化了对这些SQL的调用   ②批量处理:SQL+循环,减少流量,也就是 “跑批”   ③ 统一接口 ,确保数据的安全 相对于oracle数据库来说,MySQL的存储过程相对功能较弱,使用较少。 一、存储过程的创建和调用   >存储过程就是具有名字的一段代码,用来完成一个特定的功能。   >创建的存储过程保存在数据库的数据字典中。 1、创建存储过程 CREATE [DEFINER = { user | CURRENT_USER }]  PROCEDURE sp_name ([proc_parameter[,...]]) [characteristic

MySQL系列 | 逻辑架构

天涯浪子 提交于 2019-12-28 09:32:46
MySQL逻辑架构 MySQL作为一个大型的网络程序、数据管理系统,架构非常复杂。下图大致画出了其逻辑架构。 Connectors   MySQL首先是一个网络程序,其在TCP之上定义了自己的 应用层协议 。所以要使用MySQL,我们可以编写代码,跟MySQL Server建立TCP连接,之后按照其定义好的协议进行交互。当然这样比较麻烦,比较方便的办法是调用SDK,比如Native C API、JDBC、PHP等各语言MySQL Connector,或者通过ODBC。但通过SDK来访问MySQL,本质上还是在TCP连接上通过MySQL协议跟MySQL进行交互。 Connection Management   每一个基于TCP的网络服务都需要管理客户端链接,MySQL也不例外。MySQL会为每一个连接绑定一个线程,之后这个连接上的所有查询都在这个线程中执行。为了避免频繁创建和销毁线程带来开销,MySQL通常会缓存线程或者使用线程池,从而避免频繁的创建和销毁线程。 客户端连接到MySQL后,在使用MySQL的功能之前,需要进行认证,认证基于用户名、主机名、密码。如果用了SSL或者TLS的方式进行连接,还会进行证书认证。 SQL Interface   MySQL支持DML(数据操作语言)、DDL(数据定义语言)、存储过程、视图、触发器、自定义函数等多种SQL语言接口。 Parser  

MySQL存储过程简介

随声附和 提交于 2019-12-27 19:20:56
一、存储过程 存储过程是在大型数据库系统中一组为了完成特定功能的SQL语句集,存储在数据库中。存储过程经过第一次编译后,再次调用不需要编译,用户可以通过指定的存储过程名和给出一些存储过程定义的参数来使用它。存储过程就是为以后使用而保存的一条或多条SQL语句,个人理解跟函数类似,一般用的较少。 好处: 通过把处理封装在一个易用的单元中,可以简化复杂的操作。 2.不需要反复建立一系列的处理步骤,因而保证了数据的一致性。 3.简化了对变动的管理,这一点的延伸就是安全性。 4.存储过程通常以编译过的形式存储,所以DBMS处理命令所需的工作量少,提高了性能。 缺点: 1.可移植性差 2.对于简单的SQL语句,存储过程没什么优势 4.如果只有一个用户使用数据库,那么存储过程对安全也没什么影响 5.团队开发时需要先统一标准,否则后期维护成本大 6.在大并发量访问的情况下,不宜写过多涉及运算的存储过程 7.业务逻辑复杂时,特别是涉及到对很大的表进行操作的时候,不如在前端先简化业务逻辑 二、存储过程语法格式 一般形式 create procedure [过程名]([in|out|inout] [参数名] [参数类型],...) begin [SQL语句集;] end 在定义参数部分时in表示传入参数,读取外部变量值赋给内部参数,但内部参数的作用域仅限存储过程;out表示传出参数

MySQL4:存储过程和函数

你。 提交于 2019-12-27 05:11:40
什么是存储过程 简单说,存储过程就是一条或多条SQL语句的集合,可视为批文件,但是起作用不仅限于批处理。本文主要讲解如何创建存储过程和存储函数以及变量的使用,如何调用、查看、修改、删除存储过程和存储函数等。使用的数据库和表还是之前写JDBC用的数据库和表: create database school; use school; create table student ( studentId int primary key auto_increment not null, studentName varchar(10) not null, studentAge int, studentPhone varchar(15) ) insert into student values(null,'Betty', '20', '00000000'); insert into student values(null,'Jerry', '18', '11111111'); insert into student values(null,'Betty', '21', '22222222'); insert into student values(null,'Steve', '27', '33333333'); insert into student values(null,'James', '22

Mysql自定义函数之------------This function has none of DETERMINISTIC, NO SQL解决办法

眉间皱痕 提交于 2019-12-27 05:06:39
This function has none of DETERMINISTIC, NO SQL解决办法 创建存储过程时 出错信息: ERROR 1418 (HY000): 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) 原因: 这是我们开启了bin-log, 我们就必须指定我们的函数是否是 1 DETERMINISTIC 不确定的 2 NO SQL 没有SQl语句,当然也不会修改数据 3 READS SQL DATA 只是读取数据,当然也不会修改数据 4 MODIFIES SQL DATA 要修改数据 5 CONTAINS SQL 包含了SQL语句 其中在function里面,只有 DETERMINISTIC, NO SQL 和 READS SQL DATA 被支持。如果我们开启了 bin-log, 我们就必须为我们的function指定一个参数。 解决方法: SQL code mysql > show variables like '

Mysql导入脚本失败,提示需要SUPER权限

十年热恋 提交于 2019-12-27 04:53:57
1.删除: /*!50013 DEFINER=`root`@`localhost` SQL SECURITY DEFINER */ 2.查看增删函数有没有重复 3.删除: set GLOBAL log_bin_trust_function_creators=on; 1. 错误信息 [Err] 1227 - Access denied; you need (at least one of) the SUPER privilege(s) for this operation --常见于 RDS MySQL 5.6 ERROR 1725 (HY000) at line 1936: OPERATION need to be executed set by ADMIN --常见于 RDS MySQL 5.5 2. 错误出现的场景 在创建 存储过程、函数、触发器、事件、视图的时候出现这个错误。 从本地数据库导出 SQL,在 RDS 上应用该 SQL 的时候出现该错误。 从 RDS MySQL 5.6 实例下载逻辑备份,导入到 RDS 或本地数据库中。 3. 错误原因 导入RDS MySQL 实例:SQL 语句中含有需要 Supper 权限才可以执行的语句,而 RDS MySQL不提供 Super 权限,因此需要去除这类语句。 本地 MySQL 实例没有启用 GTID。 4. 解决 4.1 去除

MYSQL this function has none of deterministic no sql ......错误

六眼飞鱼酱① 提交于 2019-12-27 04:53:13
This function has none of DETERMINISTIC, NO SQL解决办法 创建存储过程时 出错信息: ERROR 1418 (HY000): 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) 原因: 这是我们开启了bin-log, 我们就必须指定我们的函数是否是 1 DETERMINISTIC 不确定的 2 NO SQL 没有SQl语句,当然也不会修改数据 3 READS SQL DATA 只是读取数据,当然也不会修改数据 4 MODIFIES SQL DATA 要修改数据 5 CONTAINS SQL 包含了SQL语句 其中在function里面,只有 DETERMINISTIC, NO SQL 和 READS SQL DATA 被支持。如果我们开启了 bin-log, 我们就必须为我们的function指定一个参数。 解决方法: SQL code mysql> show variables like 'log

在开启bin-log日志下Mysql报错

老子叫甜甜 提交于 2019-12-27 04:50:58
This function has none of DETERMINISTIC, NO SQL解决办法 创建存储过程时 出错信息: ERROR 1418 (HY000): 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) 原因: 这是我们开启了bin-log, 我们就必须指定我们的函数是否是 1 DETERMINISTIC 不确定的 2 NO SQL 没有SQl语句,当然也不会修改数据 3 READS SQL DATA 只是读取数据,当然也不会修改数据 4 MODIFIES SQL DATA 要修改数据 5 CONTAINS SQL 包含了SQL语句 其中在function里面,只有 DETERMINISTIC, NO SQL 和 READS SQL DATA 被支持。如果我们开启了 bin-log, 我们就必须为我们的function指定一个参数。 解决方法: SQL code mysql > show variables like '