《MysqL入门深入MysqL创建自定义函数与存储过程的详解》要点:
本文介绍了MysqL入门深入MysqL创建自定义函数与存储过程的详解,希望对您有用。如果有疑问,可以联系我们。
MysqL教程一 创建自定义函数
在使用MysqL的过程中,MysqL自带的函数可能不能完成我们的业务需求,这时就需要自定义函数,例如笔者在开发过程中遇到下面这个问题:
MysqL表结构如下
DROP table IF EXISTS `test`;
CREATE table `test` (
`ID` int(10) unsigned NOT NulL auto_INCREMENT,
`pic` varchar(50) NOT NulL,
`hashcode` varchar(16) NOT NulL,
PRIMARY KEY (`ID`)
) ENGINE=InnoDB auto_INCREMENT=5 DEFAulT CHARSET=utf8;
MysqL教程-- ----------------------------
-- Records of test
-- ----------------------------
INSERT INTO `test` VALUES ('1','2012120910403250c3fa209bf48.jpg','bf8f83818080c0f1');
INSERT INTO `test` VALUES ('2','2012120620430750c092db26557.JPG','ff9880f0f680ceff');
INSERT INTO `test` VALUES ('3','2012120619582550c08861eb062.jpg','7f7f004f7f7f7c7f');
INSERT INTO `test` VALUES ('4','2012112911072650b6d16e7f21f.jpg','7f7f004f7f7f007f');
其中pic字段为图片名称,hashcode是图片的感知哈希编码(16进制编码字符串,长度固定16位),用户输入一个hashcode,怎么从数据库中找出满足字符串对应位置的字符不同的个数小于5的记录呢?就像“11001”和“11101”对应位置不同字符不同的个数为1,比如 用户输入"7f7f004f7f7f00af",那么第三条和第四条记录是满足的,怎么实现呢?如果单纯的依靠MysqL自带的函数很难完成,这时就需要建立自定义函数解决.这个问题的解决在此非常感谢csdn的acmain_chm,acmain_chm以及oschina的@梁小刚,还有@淘宝丁奇
MysqL教程建立自定义函数的过程如下:
1.进入MySQL命令行
MysqL>
2.用delimiter命令来把语句定界符从 ;变为//.这样就允许在程序体用;定界符传递到服务器,而不是被MysqL自己来解释.
MysqL> delimiter //
3.创建自定义函数
MysqL>CREATE FUNCTION hashDiff( s1 varchar(16),s2 varchar(16))
->RETURNS INT
->BEGIN
->DECLARE diff,x INT;
->SET diff =0;
->SET x = 0;
->WHILE (x < 16 ) DO
->SET x = x+1;
->if SUBSTRING(s1,x,1)<>SUBSTRING(s2,1) then
->set diff=diff+ 1;
->end if;
->END WHILE;
->RETURN diff;
->END
->//
MysqL>select * from test t where hashDiff(t.hashcode,'ff9880f0f680ceff') < 5;
二 创建存储过程
1.进入MySQL命令行
MysqL>
2.用delimiter命令来把语句定界符从 ;变为//.这样就允许在程序体用;定界符传递到服务器,而不是被MysqL自己来解释.
MysqL> delimiter //
3.创建存储过程
代码如下:
MysqL> delimiter //
MysqL> CREATE PROCEDURE simpleproc (OUT param1 INT)
-> BEGIN
-> SELECT COUNT(*) INTO param1 FROM t;
-> END
-> //
query OK,0 rows affected (0.00 sec)
MysqL> delimiter ;
MysqL> CALL simpleproc(@a);
query OK,0 rows affected (0.00 sec)
MysqL教程
MysqL> SELECT @a;
+------+
| @a |
+------+
| 3 |
+------+
1 row in set (0.00 sec)
总结
以上是内存溢出为你收集整理的Mysql入门深入mysql创建自定义函数与存储过程的详解全部内容,希望文章能够帮你解决Mysql入门深入mysql创建自定义函数与存储过程的详解所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)