编写MySQL存储存储函数

这篇博客总结了编写MySQL存储函数(function)的过程、调试思路、总结及参考资料。

0、准备

建立测试数据库

CREATE DATABASE IF NOT EXISTS `funcdemo`;

1、编写

首先写好function框架,定义好参数返回值类型

USE funcdemo;
DELIMITER ;
DELIMITER $$

CREATE FUNCTION hello (s CHAR(20)) RETURNS CHAR(50)
BEGIN
    RETURN CONCAT(‘Hello, ‘,s,‘!‘);
END$$

命令行登录MySQL

mysql -uroot -proot;

在MySQL命令行导入脚本funcdemo.sql

source C:/sql/funcdemo.sql

注意:这里可能会报告脚本中的错误,修改后再重新导入。

导入成功结果如下:

mysql> source C:/sql/funcdemo.sql;
Query OK, 1 row affected, 1 warning (0.00 sec)

Database changed
Query OK, 0 rows affected, 1 warning (0.00 sec)

Query OK, 0 rows affected, 1 warning (0.00 sec)

Query OK, 0 rows affected (0.00 sec)

查看已创建的function

mysql> use funcdemo;
Database changed
mysql> show function status;

可以看到已创建的函数

| funcdemo                 | hello                  | FUNCTION | [email protected] |

调用看返回结果

mysql> select hello(‘functest‘);
+-------------------+
| hello(‘functest‘) |
+-------------------+
| Hello, functest!  |
+-------------------+
1 row in set (0.00 sec)

2、编写业务逻辑

编写业务逻辑,比如加入字符串长度判断

BEGIN
    IF LENGTH(s) > 10 THEN
      RETURN CONCAT(‘input string too long!‘);
    ELSE
      RETURN CONCAT(‘Hello‘, s, ‘!‘);
END$$

重新用source命令导入,再次执行:

mysql> source C:/sql/funcdemo.sql;
Query OK, 1 row affected, 1 warning (0.00 sec)

Database changed
Query OK, 0 rows affected, 1 warning (0.00 sec)

Query OK, 0 rows affected (0.00 sec)

Query OK, 0 rows affected (0.00 sec)

mysql> select hello(‘functestverylonglong‘);
+-------------------------------+
| hello(‘functestverylonglong‘) |
+-------------------------------+
| input string too long!        |
+-------------------------------+
1 row in set (0.00 sec)

3、调试

存储函数不能像存储函数那样用 select varname; 来查看参数,但是可以通过临时表的方式查看。

创建临时表,插入要查看的参数:

CREATE TEMPORARY TABLE IF NOT EXISTS `tmp` (
  value CHAR(20) CHARACTER SET utf8 COLLATE utf8_bin
);
DELETE FROM tmp;
INSERT INTO tmp (value) VALUES(s);

重新导入后,执行函数再查看临时表:

mysql> select hello(‘functest‘);
+-------------------+
| hello(‘functest‘) |
+-------------------+
| Hellofunctest!    |
+-------------------+
1 row in set (0.01 sec)

mysql> select * from tmp;
+----------+
| value    |
+----------+
| functest |
+----------+
1 row in set (0.00 sec)

4、总结

第一次编写存储函数遇到了很多问题:

- 用navicat客户端经常遇到因为语法不对丢失内容问题,后来采用命令行解决。
- source命令导入脚本,遇到路径问题,报告脚本不存在:windows环境下,需要用 / 替换默认的 \ 作为路径分隔符。
- 存储函数前后要定义分隔符 DELIMITER;默认分隔符是 ; 在存储函数前要改为 $$,导入结束要改为 ;

DELIMITER ;
DELIMITER $$
BEGIN
- - 存储函数定义
END$$
DELIMITER ;

- 如何对定义的参数进行类型转换、查找MySQL自带的字符串、日期等函数。
- 终端下查看的中文乱码:set names gb2312;
- 用show命令查看已定义的数据库、表、函数:

show databases;
show tables;
show function status;

- 用show命令查看创建,在show命令后加入CREATE参数:

mysql> show create database funcdemo;
+----------+-------------------------------------------------------------------+
| Database | Create Database                                                   |
+----------+-------------------------------------------------------------------+
| funcdemo | CREATE DATABASE `funcdemo` /*!40100 DEFAULT CHARACTER SET utf8 */ |
+----------+-------------------------------------------------------------------+
1 row in set (0.00 sec)

mysql> show create table t;
+-------+-------------------------------------------------------------------------------------------------------------------------+
| Table | Create Table                                                                                                            |
+-------+-------------------------------------------------------------------------------------------------------------------------+
| t     | CREATE TABLE `t` (
  `c` char(20) CHARACTER SET utf8 COLLATE utf8_bin DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8 |
+-------+-------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)

mysql> show create function hello;

- 用mysqldump带 --opt -R 参数导出数据库和存储函数

>mysqldump -proot -uroot --opt -R funcdemo > c:/sql/backup.sql

多看,多写,多调试,多总结。

本文的示例脚本可以在这里下载。

下一篇会介绍如何使用MySQL官方文档查看SQL语法、函数说明示例进行介绍。

时间: 2024-11-13 09:01:53

编写MySQL存储存储函数的相关文章

MySQL数据库——存储和函数

一.存储过程1 基本语法CREATE PROCEDURE sp_name ([proc_parameter[,...]]) [characteristic ...] routine_body 格式[IN|OUT|INOUT]param_name type 2. IN.OUT.INOUT参数(1)带IN的存储过程 1 #创建储存过程.cmd 中运行 2 CREATE PROCEDURE SP_SEARCH(IN p_name CHAR(20)) 3 BEGIN 4 IF p_name is nul

mysql中(存储)函数

(存储)函数: 函数,也说成"存储函数",其实就是js或php中所说的函数! 唯一的区别: 这里的函数必须返回一个数据(值): 定义形式: 注意事项: 1, 在函数内部,可以有各种变量和流程控制的使用: 2, 在函数内部,也可以有各种增删改语句: 3, 在函数内部,不可以有select或其他"返回结果集"的查询类语句: 举例: 调用形式: 跟调用内部函数一样!比如: select  now(),  8+3 as f2,   func1(); //这里,now()是系

mysql 的存储引擎介绍

在数据库中存的就是一张张有着千丝万缕关系的表,所以表设计的好坏,将直接影响着整个数据库.而在设计表的时候,我们都会关注一个问题,使用什么存储引擎.等一下,存储引擎?什么是存储引擎? 什么是存储引擎? MySQL中的数据用各种不同的技术存储在文件(或者内存)中.这些技术中的每一种技术都使用不同的存储机制.索引技巧.锁定水平并且最终提供广泛的不同的功能和能力.通过选择不同的技术,你能够获得额外的速度或者功能,从而改善你的应用的整体功能. 例如,如果你在研究大量的临时数据,你也许需要使用内存MySQL

Mysql ==》 存储引擎

一.什么是存储引擎? mysql中建立的表==>文件夹 库中建立的表==>文件 现实生活中我们用来存储数据的文件应该有不同的类型: 比如: 存文本用的txt类型,存表格用的excel,存图片png等. 数据库中的表也应该有不同的类型,表的类型不用,回对应mysql不同的存取机制,表类型又称为存储引擎. 存储引擎说白了就是如何存储数据?如何为存储的数据建立索引和如何更新.查询数据等技术的实现方法,因为关系数据库中 数据的存储是以表的形式存储的,所以存储引擎也可以称为表类型(即存储和操作此表的类型

浅谈MySql的存储引擎(表类型) (转)

什么是MySql数据库 通常意义上,数据库也就是数据的集合,具体到计算机上数据库可以是存储器上一些文件的集合或者一些内存数据的集合. 我们通常说的MySql数据库,sql server数据库等等其实是数据库管理系统,它们可以存储数据,并提供查询和更新数据库中的数据的功能等等.根据数据库如何存储数据和如何操作数据的实现机制不同,这些数据库之间即有区别又有共同点. MySql数据库是开放源代码的关系型数据库.目前,它可以提供的功能有:支持sql语言.子查询.存储过程.触发器.视图.索引.事务.锁.外

MySQL三:存储引擎

阅读目录 一 什么是存储引擎 二 mysql支持的存储引擎 三 使用存储引擎 一 什么是存储引擎 mysql中建立的库===>文件夹 库中建立的表===>文件 现实生活中我们用来存储数据的文件应该有不同的类型:比如存文本用txt类型,存表格用excel,存图片用png等 数据库中的表也应该有不同的类型,表的类型不同,会对应mysql不同的存取机制,表类型又称为存储引擎. 存储引擎说白了就是如何存储数据.如何为存储的数据建立索引和如何更新.查询数据等技术的实现方法.因为在关系数据库中数据的存储是

浅谈MySql的存储引擎(表类型)

来源:http://www.cnblogs.com/lina1006/archive/2011/04/29/2032894.html 什么是MySql数据库 通常意义上,数据库也就是数据的集合,具体到计算机上数据库可以是存储器上一些文件的集合或者一些内存数据的集合.    我们通常说的MySql数据库,sql server数据库等等其实是数据库管理系统,它们可以存储数据,并提供查询和更新数据库中的数据的功能等等.根据数据库如何存储数据和如何操作数据的实现机制不同,这些数据库之间即有区别又有共同点

MySQL的存储引擎与日志说明

1.1 存储引擎的介绍 1.1.1 文件系统存储 文件系统:操作系统组织和存取数据的一种机制.文件系统是一种软件. 类型:ext2 3 4 ,xfs 数据.  不管使用什么文件系统,数据内容不会变化,不同的是,存储空间.大小.速度. 1.1.2 mysql数据库存储 MySQL引擎: 可以理解为,MySQL的“文件系统”,只不过功能更加强大. MySQL引擎功能: 除了可以提供基本的存取功能,还有更多功能事务功能.锁定.备份和恢复.优化以及特殊功能. 1.1.3 MySQL存储引擎种类 MySQ

MySQL:存储引擎介绍

前言,什么是存储引擎 mysql中建立的库===>文件夹 库中建立的表===>文件 现实生活中我们用来存储数据的文件有不同的类型,每种文件类型对应各自不同的处理机制:比如处理文本用txt类型,处理表格用excel,处理图片用png等 数据库中的表也应该有不同的类型,表的类型不同,会对应mysql不同的存取机制,表类型又称为存储引擎. 存储引擎说白了就是如何存储数据.如何为存储的数据建立索引和如何更新.查询数据等技术的实现方法.因为在关系数据库中数据的存储是以表的形式存储的,所以存储引擎也可以称