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教程-- ---------------------------- 其中pic字段为图片名称,hashcode是图片的感知哈希编码(16进制编码字符串,长度固定16位),用户输入一个hashcode,怎么从数据库中找出满足字符串对应位置的字符不同的个数小于5的记录呢?就像“11001”和“11101”对应位置不同字符不同的个数为1,比如 用户输入"7f7f004f7f7f00af",那么第三条和第四条记录是满足的,怎么实现呢?如果单纯的依靠mysql自带的函数很难完成,这时就需要建立自定义函数解决.这个问题的解决在此非常感谢csdn的acmain_chm,acmain_chm以及oschina的@梁小刚,还有@淘宝丁奇 MYSQL教程建立自定义函数的过程如下: 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教程 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |