MySql存储过程总结
原文:MySql存储过程总结

之前总是在MSSQL上写存储过程,没有在MYSQL上写过,也基本没有用过,今天需要用到MYSQL,研究了下,把项目的需要的存储过程写了一部分,写一下工作总结。这里没有给出数据库结构,不讨论SQL语句的细节,主要探讨存储过程语法,适合有基础的人。

发表地址:http://www.cnblogs.com/zxlovenet/p/3783136.html

#查询文章回复
-- ----------------------------
-- Procedure structure for `sp_select_reply_article`
-- ----------------------------
DROP PROCEDURE IF EXISTS `sp_select_reply_article`;
DELIMITER ;;
CREATE DEFINER=`root`@`localhost` PROCEDURE `sp_select_reply_article`(IN `ra_id` int,IN `pagefrom` int,IN `pagesize` int)
BEGIN#Routine body goes here...SET @ra_id = ra_id;SET @pagefrom = pagefrom;SET @pagesize = pagesize;SET @ssra = CONCAT('SELECT * FROM gk_article WHERE id = ? LIMIT ?,?');PREPARE sqlquery FROM @ssra;EXECUTE sqlquery USING @ra_id,@pagefrom,@pagesize;
END
;;
DELIMITER ;

#技术点1:MySql5.1不支持LIMIT参数(MySql5.5就支持了),如果编写存储过程时使用LIMIT做变量,那是需要用动态SQL来构建的,而这样做性能肯定没有静态SQL好。主要代码如下:

SET @ssra = CONCAT('SELECT * FROM gk_article WHERE id = ? LIMIT ?,?');

PREPARE sqlquery FROM @ssra;

EXECUTE sqlquery USING @ra_id,@pagefrom,@pagesize;

#技术点2:如果同时需要返回受影响行数需要在语句后面添加语句:ROW_COUNT()函数,两条语句之间需要“;”分隔。

发表地址:http://www.cnblogs.com/zxlovenet/p/3783136.html

#更新数据
-- ----------------------------
-- Procedure structure for `sp_update_permission`
-- ----------------------------
DROP PROCEDURE IF EXISTS `sp_update_permission`;
DELIMITER ;;
CREATE DEFINER=`root`@`localhost` PROCEDURE `sp_update_permission`(IN `puser_uid` varchar(20),IN `plevel` int,IN `ppower` int)
BEGIN#Routine body goes here...SET @puser_uid = puser_uid;SET @plevel = plevel;SET @ppower = ppower;UPDATE gk_permission SET `level` = @plevel, power = @ppower WHERE user_uid = CONVERT(@puser_uid USING utf8) COLLATE utf8_unicode_ci;
END
;;
DELIMITER ;

#技术点3:MySQL进行字符串比较时发生错误(Illegal mix of collations (utf8_unicode_ci,IMPLICIT) and (utf8_general_ci,IMPLICIT) for operation '='),解决方法:将比较等式一边进行字符串转换,如改为“CONVERT(b.fullCode USING utf8) COLLATE utf8_unicode_ci”,主要代码如下:

UPDATE gk_permission SET `level` = @plevel, power = @ppower WHERE user_uid = CONVERT(@puser_uid USING utf8) COLLATE utf8_unicode_ci;

#插入数据
-- ----------------------------
-- Procedure structure for `sp_insert_user`
-- ----------------------------
DROP PROCEDURE IF EXISTS `sp_insert_user`;
DELIMITER ;;
CREATE DEFINER=`root`@`localhost` PROCEDURE `sp_insert_user`(IN `uid` varchar(20),IN `upw` varchar(32),IN `name` varchar(20),IN `sex` int,IN `phone` varchar(20),IN `u_id` int,IN `s_id` int,IN `j_id` int)
BEGIN#Routine body goes here...SET @uid = uid;SET @upw = upw;SET @uname = uname;SET @sex = sex;SET @phone = phone;#由于外键约束,所以添加的外键字段需要在对应外键所在表有相应数据SET @u_id = u_id;SET @s_id = s_id;SET @j_id = j_id;SET @verifytime = DATE('0000-00-00');INSERT INTO gk_user(uid,upw,uname,sex,phone,u_id,s_id,j_id,verifytime)        VALUES(@uid,@upw,@uname,@sex,@phone,@u_id,@s_id,@j_id,@verifytime);#查询结果会自动返回受影响行数
END
;;
DELIMITER ;

发表地址:http://www.cnblogs.com/zxlovenet/p/3783136.html

#根据ID删除数据
-- ----------------------------
-- Procedure structure for `sp_delete_exchange_by_id`
-- ----------------------------
DROP PROCEDURE IF EXISTS `sp_delete_exchange_by_id`;
DELIMITER ;;
CREATE DEFINER=`root`@`localhost` PROCEDURE `sp_delete_exchange_by_id`(IN `eid` int)
BEGIN#Routine body goes here...SET @eid = eid;DELETE FROM gk_exchange WHERE id = @eid;
END
;;
DELIMITER ;

#通过账号查询用户或者管理员
-- ----------------------------
-- Procedure structure for `sp_select_user_by_uid`
-- ----------------------------
DROP PROCEDURE IF EXISTS `sp_select_user_by_uid`;
DELIMITER ;;
CREATE DEFINER=`root`@`localhost` PROCEDURE `sp_select_user_by_uid`(IN `uid` varchar(20),IN `getAdmin` int)
BEGIN#Routine body goes here...SET @uid = uid;#SET @getadmin = getAdmin;#查询管理员IF (getAdmin = 1) THENSELECT us.*, un.`name`, se.`name`, jo.`name`, pe.`level`, pe.power FROM gk_user AS us, gk_unit AS un, gk_section AS se, gk_jobtitle AS jo, gk_permission AS pe WHERE us.u_id = un.id AND us.s_id = se.id AND us.j_id = jo.id AND us.uid = pe.user_uid AND us.uid = CONVERT(@uid USING utf8) COLLATE utf8_unicode_ci;END IF;#查询用户IF (getAdmin = 0) THENSELECT us.*, un.`name`, se.`name`, jo.`name` FROM gk_user AS us, gk_unit AS un, gk_section AS se, gk_jobtitle AS jo WHERE us.u_id = un.id AND us.s_id = se.id AND us.j_id = jo.id AND us.uid = CONVERT(@uid USING utf8) COLLATE utf8_unicode_ci;END IF;
END
;;
DELIMITER ;

#技术点4:这个存数过程需要用到控制语句(if else elseif while loop repeat leave iterate)。

IF (getAdmin = 1) THEN

#语句…

END IF;

发表地址:http://www.cnblogs.com/zxlovenet/p/3783136.html

#技术点5:在传入参数不匹配的情况下报错(Column count doesn't match value count at row 1),这个就是细心问题了,详细检查参数吧。

#技术点6:获取当前时间的函数:NOW()

#技术点7:“`”这个符号是反单引号,两个反单引号夹起来的会被当做变量,一般是在定义字段时遇到关键字冲突的时候会用到。

posted on 2014-06-12 12:44 NET未来之路 阅读(...) 评论(...) 编辑 收藏

转载于:https://www.cnblogs.com/lonelyxmas/p/3783727.html

MySql存储过程总结相关推荐

  1. 常用MySQL函数存储过程_解析MySQL存储过程、常用函数代码

    mysql存储过程的概念: 存储在数据库当中可以执行特定工作(查询和更新)的一组SQL代码的程序段. mysql函数的概念: 函数是完成特定功能的SQL语句,函数分为内置函数和自定义函数(user-d ...

  2. MySQL 存储过程传参之in, out, inout 参数用法

    存储过程传参:存储过程的括号里,可以声明参数. 语法是 create procedure p([in/out/inout] 参数名  参数类型 ..) in :给参数传入值,定义的参数就得到了值 ou ...

  3. mysql中leave和_MySQL数据库之Mysql存储过程使用LEAVE实现MSSQL存储过程中return语法

    本文主要向大家介绍了MySQL数据库之Mysql存储过程使用LEAVE实现MSSQL存储过程中return语法 ,通过具体的内容向大家展现,希望对大家学习MySQL数据库有所帮助. DELIMITER ...

  4. MySQL存储过程详解

    1.      存储过程简介   我们常用的操作数据库语言SQL语句在执行的时候需要要先编译,然后执行,而存储过程(Stored Procedure)是一组为了完成特定功能的SQL语句集,经编译后存储 ...

  5. mysql存储过程语法及实例

    存储过程如同一门程序设计语言,同样包含了数据类型.流程控制.输入和输出和它自己的函数库. --------------------基本语法-------------------- 一.创建存储过程 c ...

  6. mycat mysql 存储过程_MyCat 学习笔记 第十三篇.数据分片 之 通过HINT执行存储过程...

    1 环境说明 VM 模拟3台MYSQL 5.6 服务器 VM1 192.168.31.187:3307 VM2 192.168.31.212:3307 VM3 192.168.31.150:  330 ...

  7. mysql 存储过程 格式化_转 mysql 存储过程初探

    https://www.cnblogs.com/qmfsun/p/4838032.html MySQL命令执行sql文件的两种方法 https://www.cnblogs.com/mark-chan/ ...

  8. hibernate mysql 存储过程_hibernate调用mysql存储过程

    hibernate调用mysql存储过程 在最近的项目中,碰到一小段数据库数据分析的程序,需要结合多张表联合查询或涉及到子查询,项目主要采用的java ee开发,使用了hibernate框架,由于这些 ...

  9. mybatis mysql 存储过程_Mysql 存储过程+Mybatis调用实现插入操作例子 | 学步园

    一. 简介:网上关于存储过程的使用有很多的例子,但大多实现的功能比较简单,由于本人对SQL语句还不是很熟悉,更别说存储过程了,所以在实现该例子的时候遇到了很多问题,现在拿给大家来分享. 二. 在本例子 ...

  10. MySQL 存储过程初研究

    最近在做一个移动设备多类型登录的统一用户系统.其中记录用户资料的部分,因为涉及到更换设备的相同用户.同一个用户多类型同时具备的情况,所以想分辨出尽量少的用户去合理记录,就需要多次查询.于是决定研究一下 ...

最新文章

  1. c++动态分配二维数组
  2. 性价比超高:苹果发布了新数据集,助力室内场景理解
  3. 如何用java使用POI读取excel文件,创建excel文件,实现批量导出和导入
  4. 安装Axis2的eclipse插件后,未出现界面
  5. Network 之一 国际标准组织介绍、互联网/因特网、以太网概念区分、协议标准
  6. android判断主线程_android中从子线程切换到主线程,但是显得代码很臃肿,请教大牛是怎么自定义的?...
  7. 这群程序员疯了!他们想成为IT界最会带货的男人
  8. Oracle plsql 打包
  9. python多线程调度_python并发编程之进程、线程、协程的调度原理(六)
  10. shell 将两行内容合并到同一行
  11. Linux下命令详解(-)
  12. 使用JWT保护你的Spring Boot应用 - Spring Security实战
  13. 移动APP开发的五个重要步骤
  14. 分享]人生忠告——七天改变人生影响世界
  15. 免费好用的SNMP网管工具 Sugarnmstool
  16. 使用虚拟机安装操作系统可能出现的问题
  17. 40个超有趣的Linux命令行彩蛋和游戏
  18. 面试拿到外包公司offer该不该去?!
  19. Yamaha DGX660 电钢琴aux-in只响一边的处理记录
  20. HTML学习(—..—)

热门文章

  1. 调用新浪微博显示用户信息
  2. layoutSubview 总结
  3. 项目组【网站】的项目
  4. python数学建模可视化,[Python与数学建模-数据处理与可视化]-3数据处理工具Pandas...
  5. java cxf webservice 对象 c#客户端_使用CXF开发WebService客户端
  6. 监控与分析工具nmon的安装与使用
  7. qt 无框dockwidget_QT解决通过菜单方式无法让QDockWidget 显示和隐藏
  8. pio代表什么_“PIO是什么的简称?PIO”是什么的 – 手机爱问
  9. Ubuntu安装RabbitMQ及RabbitMQ基于使用
  10. 【渝粤题库】陕西师范大学800006 世界地理