mysql存储过程

MySql存储过程总结

笑着哭i 提交于 2020-01-21 00:07:20
之前总是在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

Mysql 存储过程查询结果赋值到变量的方法

馋奶兔 提交于 2020-01-21 00:04:18
Mysql把查询结果赋值到变量,我们可以使用set或into的方式来实现赋值。示例代码如下: drop table if exists test_tbl; create table test_tbl (name varchar(20), status int(2)); insert into test_tbl values('abc', 1),('edf', 2),('xyz', 3); drop procedure IF EXISTS pro_test_3; delimiter // create procedure pro_test_3() begin -- 方式 1 DECLARE cnt INT DEFAULT 0; select count(*) into cnt from test_tbl; select cnt; -- 方式 2 set @cnt = (select count(*) from test_tbl); select @cnt; -- 方式 3 select count(*) into @cnt1 from test_tbl; select @cnt1; -- 多个列的情况下似乎只能用 into 方式 select max(status), avg(status) into @max, @avg from test_tbl; select @max,

mysql定时任务

僤鯓⒐⒋嵵緔 提交于 2020-01-16 15:02:42
查看event是否开启: show variables like '%sche%'; 将事件计划开启: set global event_scheduler=1; 关闭事件任务: alter event e_test ON COMPLETION PRESERVE DISABLE; 开户事件任务: alter event e_test ON COMPLETION PRESERVE ENABLE; 创建存储过程test CREATE PROCEDURE test () BEGIN INSERT INTO table(end_time) VALUES(now()) ; END; 创建event e_test CREATE EVENT if not exists e_test on schedule every 30 second on completion preserve do call test(); 每隔30秒将执行存储过程test 从6月8号开始每天定时执行存储过程:ON SCHEDULE AT TIMESTAMP '2016-06-08 12:00:00' 来源: https://www.cnblogs.com/godLike7/p/5570734.html

mysql 存储过程 提示错误

会有一股神秘感。 提交于 2019-12-19 18:41:27
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> declare v_no varchar(200); declare v_begin varchar(200); set v_no='111'; 提示 Illegal mix of collations (utf8_unicode_ci,IMPLICIT) and (utf8_general_ci,IMPLICIT) for operation 'find_in_set' 修改 alter table `test1`.`wave` convert to character set utf8 collate utf8_unicode_ci; 来源: oschina 链接: https://my.oschina.net/u/100299/blog/179313

mysql存储过程使用需要注意

谁都会走 提交于 2019-12-07 09:07:35
1、其实很简单的一点需要注意就是,不要滥用 - 数据库确实能够完成很多事情,但是将业务逻辑掺杂到数据库中很容易出现的一点就是,维护性一定程度降低。因为中间数据无法使用程序打印,会直接导致程序员调试难度加大 2、尽量简单,不要过于复杂。 - 数据库容易成为项目瓶颈,拖慢整个系统速度 有时候我们会把一些事务写在存储过程里,认为这样更加可靠。其实写在程序中也是可以的,当系统异常在start transaction之后,没有接收到commit后,mysql会在超时之后自动rollback, 当然,程序段还是需要保证所有的事务都commit,不然会出现很多等待的事务。 添加一些上篇文章没有使用到的语法: declare test int default 1; select 1 into test; declare test1 int; declare test2 int; select 1, 2 into test1, test2; if test1 = 2 then select 'eq'; else select 'nq'; end if 来源: oschina 链接: https://my.oschina.net/u/195896/blog/350767

RFID设备管理C#客户端学习笔记之0:引言

最后都变了- 提交于 2019-12-07 01:27:58
RFID技术已经得到了广泛应用。比如门禁系统、车辆入库出库都会有RFID读写设备在工作。其原理简单讲就是,读写器向自己的有效区域发射信号,RFID标签会反射信号,读写器就读到了标签的信息。 RFID标签 主要有4部分组成,分别是保留内存区、EPC、TID,和用户自定义存储区。其结构图如下: ref: 四个区详细内容介绍 我们打算在JT-8290A读写器和配套通讯协议基础上基于Socket技术做一个Windows小程序。(只是读EPC区,不涉及其他区) 开发工具:Visual Studio 2013 数据库:5.5.43 MySQL Community Server (GPL) 需要掌握的基础:WPF概念,基本sql语句,后面可能用到多线程、泛型、Socket等。 工作场景:RFID标签贴到设备或物资上,物资进出的时候会被读写器扫描到,扫描记录需要存储,库存记录也需要存储,在此基础上设计出如下的数据库。 1 数据库结构 图1-1 数据库结构图 People、type比较简单。 tags存储标签的EPC区信息和备注。 device表中typeName和tag字段是外键, repository表中tagID是外键, 具体指向见图1-1 设备进出历史iohistory中tagID也是外键,这里方便测试将这个外键删掉了。。 项目源码以及MysqlHelper.cs和MysqlData

MyBatis从入门到精通(第6章):MyBatis 高级查询->6.1 高级结果映射

半世苍凉 提交于 2019-12-05 06:44:12
jdk1.8、MyBatis3.4.6、MySQL数据库5.6.45、Eclipse Version: 2019-12 M2 (4.14.0) 本章主要包含的内容为 MyBatis 的高级结果映射 ,主要处理数据库一对一 、一对多的查询 ,另外就是在 MyBatis 中使用存储过程的方法 ,处理存储过程的入参和出参方法 ,最后会介绍 Java 中的枚举方法和数据库表字段的处理方法 。 6.1 高级结果映射 来源: https://www.cnblogs.com/MarlonKang/p/11911315.html

mysql-存储过程--demo

…衆ロ難τιáo~ 提交于 2019-12-03 02:15:55
BEGIN DECLARE done INT DEFAULT 0 ; DECLARE examId VARCHAR (40) ; DECLARE cur CURSOR FOR SELECT f_id FROM `exam`.t_exam; DECLARE CONTINUE HANDLER FOR NOT found SET done = 1 ; DELETE FROM `report`.`t_exam_pass_member` WHERE f_id LIKE 'bigdata%'; OPEN cur ; loop_xxx : LOOP FETCH cur INTO examId ; IF done = 1 THEN LEAVE loop_xxx ; END IF ; INSERT INTO `report`.`t_exam_pass_member` (`f_id`, `f_exam_id`, `f_pass_member`, `f_company_id`, `f_create_time`, `f_version`) SELECT concat('bigdata',examId), examId, '3', '1', UNIX_TIMESTAMP() * 1000, 1 ; COMMIT; END LOOP; CLOSE cur ; END 来源: https://www

C#工具类MySqlHelper,基于MySql.Data.MySqlClient封装

匿名 (未验证) 提交于 2019-12-02 22:09:29
源码: 1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Text; 5 using System.Threading.Tasks; 6 using System.Data; 7 using MySql.Data.MySqlClient; 8 9 10 namespace Fly.Util.DataBase 11 { 12 /// <summary> 13 /// MySql数据库操作类 14 /// </summary> 15 public static class MySqlHelper 16 { 17 /// <summary> 18 /// 执行数据库非查询操作,返回受影响的行数 19 /// </summary> 20 /// <param name="connectionString">数据库连接字符串</param> 21 /// <param name="cmdType">命令的类型</param> 22 /// <param name="cmdText">MySql存储过程名称或PL/SQL命令</param> 23 /// <param name="cmdParms">命令参数集合</param> 24 /// <returns

MYSQL存储过程中事务和DECLARE EXIT/CONTINUE HANDLER的使用

匿名 (未验证) 提交于 2019-12-02 22:06:11
1 -- 1、DECLARE EXIT HANDLER FOR SQLEXCEPTION 语句后面可以跟一个 begin end的复合语句块,也可以直接跟一个简单语句例如 :DECLARE EXIT HANDLER FOR SQLEXCEPTION v_succ=0; 3 -- 2、EXIT会在执行异常后执行执行 FOR SQLEXCEPTION 后的语句或块而整个停止下来;CONTINUE选项会在异常后继续执行,从而将id为2的记录写入到数据库中。 4 5 DROP PROCEDURE IF EXISTS p_test; 6 delimiter // 7 CREATE PROCEDURE p_test(OUT v_succ tinyint) 8 BEGIN 9 DECLARE EXIT HANDLER FOR SQLEXCEPTION 10 BEGIN 11 SET v_succ=0; 12 ROLLBACK; 13 END; 14 SET v_succ=1; 15 START TRANSACTION; 16 INSERT INTO tb_test (id) VALUES (1); 17 SIGNAL SQLSTATE '45001' SET MYSQL_ERRNO=2000,MESSAGE_TEXT='故意触发异常'; 18 INSERT INTO tb_test (id)