mysql自定义函数

存储过程

匆匆过客 提交于 2019-12-31 05:43:24
存储过程如同一门程序设计语言,同样包含了数据类型、流程控制、输入和输出和它自己的函数库。 --------------------基本语法-------------------- 一 . 创建存储过程 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存储过程的详细信息 --------------------数据类型及运算符-------------------- 一、基本数据类型: 略 二、变量: 自定义变量:DECLARE a INT ; SET a=100; 可用以下语句代替:DECLARE a INT DEFAULT 100; 变量分为 用户变量 和 系统变量 ,系统变量又分为会话和全局级变量 用户变量

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 创建用户自定义函数

做~自己de王妃 提交于 2019-12-27 05:08:52
为了防止分号产生的中途输出,自己定义一个 分隔符,这里仿照mysql官方的例子:使用两个美元符号 $$ 作为分割符号,下面这段代码就是创建一个自定义mysql函数的原型了,可以在这个基础上修改,这样,创建函数就不会产生很多错误了. set global log_bin_trust_function_creators = 1; -- 开启bin_log 复制 函数创建 DROP FUNCTION IF EXISTS hello; -- 删掉已经存在的 DELIMITER $$ -- 定义分隔符,必须要有,可以不是$$ CREATE FUNCTION hello( s varchar(30)) -- 多个参数用,分割 参数的类型必须是mysql列存在的类型 RETURNS VARCHAR(255) -- 指定返回值类型,如果你不确定返回文本长度,可以使用text BEGIN DECLARE str varchar(255) default 'hello '; -- 定义一个变量,可以指定默认值 SET str = concat(str,s); -- 设置改边变量的值 RETURN str; -- 返回值 END $$ -- 注意看清楚了,这个end后面有你在前面定义的分割符号 DELIMITER $$ -- 好,这里结束。 来源: https://www.cnblogs.com

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建自定义函数报错

强颜欢笑 提交于 2019-12-27 05:06:09
This function has none of DETERMINISTIC, NO SQL, or READS SQL DATA in its de 错误解决办法创建function时 出错信息: 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指定一个参数。

mysql 报错之创建自定义函数

非 Y 不嫁゛ 提交于 2019-12-27 05:05:08
I experienced this error while trying to alter one of my stored procedures remotely on a master server. After some research, I ended up getting information from “ Binary Logging of Stored Programs “. From MySQL Reference in verbatim: When you create a stored function, you must declare either that it is deterministic or that it does not modify data. Otherwise, it may be unsafe for data recovery or replication. By default, for a CREATE FUNCTION statement to be accepted, at least one of DETERMINISTIC, NO SQL, or READS SQL DATA must be specified explicitly. Otherwise an error occurs: ERROR 1418

自定义mysql函数时报错,[Err] 1418 - This function has none of DETERMINISTIC......

点点圈 提交于 2019-12-27 04:51:50
  今天在我执行 自定义mysql函数 的SQL时发生了错误,SQL如下: /** 自定义mysql函数 getChildList */ delimiter // CREATE FUNCTION `pengwifi_wifi`.`getChildList`(rootId INT) RETURNS varchar(1000) BEGIN DECLARE sTemp VARCHAR(1000); DECLARE sTempChd VARCHAR(1000); SET sTemp = '$'; SET sTempChd =cast(rootId as CHAR); WHILE sTempChd is not null DO SET sTemp = concat(sTemp,',',sTempChd); SELECT group_concat(id) INTO sTempChd FROM hui_class where FIND_IN_SET(parent_id,sTempChd)>0; END WHILE; RETURN sTemp; END // 报错信息:[Err] 1418 - This function has none of DETERMINISTIC, NO SQL, or READS SQL DATA in its declaration and binary

MySQL变量的使用总结

烈酒焚心 提交于 2019-12-26 00:47:15
MySQL变量的使用总结 MySQL的变量分为系统变量和自定义变量两大类。自定义变量变量由用户定义,又分为局部变量和用户变量;系统变量变量由系统定义,又分为会话变量和全局变量。 一、局部变量 局部变量一般用在SQL语句块中,例如:存储过程、自定义函数、触发器中,局部变量仅仅在定义它的begin/end块中有效,作用范围为该语句块。定义局部变量需要使用DECLARE关键字进行声明,然后给局部变量赋值。 1、局部变量的声明 DECLARE 局部变量名称 类型; --声明局部变量 DECLARE 局部变量名称 类型 【DEFAULT 值】; --声明局部变量并设置默认值 2、局部变量的赋值 局部变量有两种赋值方式: (1)使用SET关键字,语法如下: SET 局部变量名称=值; SET 局部变量名称:=值; (2)使用SELECT关键字,语法如下: SELECT 局部变量名称:=值; SELECT 字段1,字段2,... INTO 局部变量名称1,局部变量名称2,... FROM 表; 4、局部变量的使用 SELECT 局部变量名称; 5、局部变量的应用举例 定义一个自定义函数,通过输入学生姓名和课程名称查询该学生所学课程的成绩。该自定义函数使用了一个局部变量result,类型为int,通过select…into命令把查询结果保存到该变量,然后使用return返回变量的值。 mysql>

Spark SQL基本概念与基本用法

非 Y 不嫁゛ 提交于 2019-12-24 15:31:17
1. Spark SQL概述 1.1 什么是Spark SQL Spark SQL是Spark用来处理结构化数据的一个模块,它提供了两个编程抽象分别叫做DataFrame和DataSet,它们用于作为分布式SQL查询引擎。从下图可以查看RDD、DataFrames与DataSet的关系。 1.2 为什么要学习Spark SQL Hive,它是将Hive SQL转换成MapReduce,然后提交到集群上执行的,大大简化了编写MapReduce程序的复杂性,而且MapReduce这种计算模型执行效率比较慢。类比Hive,Spark SQL,它时将Spark SQL转换成RDD,然后提交到集群上执行,执行效率非常快! 2. DataFrames 2.1 什么是DataFrames 与RDD类似,DataFrame也是一个分布式数据容器。然而DataFrame更像传统数据库的二维表格,除了数据以外,还记录数据的结构信息,即schema。同时,与Hive类似,DataFrame也支持嵌套数据类型(struct、array和map)。从API易用性的角度上看,DataFrame API提供的是一套高层的关系操作,比函数式的RDD API要更加友好,门槛更低。由于与R和Pandas的DataFrame类似,Spark DataFrame很好地继承了传统单机数据分析的开发体验。 2.2