欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  数据库

mysql存储过程的应用

程序员文章站 2022-06-13 16:40:31
...

欢迎进入Linux社区论坛,与200万技术人员互动交流 >>进入 MySQL存储过程的创建 (1)。 格式 MySQL存储过程创建的格式:CREATE PROCEDURE 过程名 ([过程参数[,…]]) [特性 …] 过程体 这里先举个例子: mysql DELIMITER // mysql CREATE PROCEDURE proc1(

欢迎进入Linux社区论坛,与200万技术人员互动交流 >>进入

  MySQL存储过程的创建

  (1)。 格式

  MySQL存储过程创建的格式:CREATE PROCEDURE 过程名 ([过程参数[,…]])

  [特性 …] 过程体

  这里先举个例子:

  mysql> DELIMITER //

  mysql> CREATE PROCEDURE proc1(OUT s int)

  -> BEGIN

  -> SELECT COUNT(*) INTO s FROM user;

  -> END

  -> //

  mysql> DELIMITER ;

  注:

  (1)这里需要注意的是DELIMITER //和DELIMITER ;两句,DELIMITER是分割符的意思,因为MySQL默认以";"为分隔符,如果我们没有声明分割符,那么编译器会把存储过程当成SQL语句进行处理,则存储过程的编译过程会报错,所以要事先用DELIMITER关键字申明当前段分隔符,这样MySQL才会将";"当做存储过程中的代码,不会执行这些代码,用完了之后要把分隔符还原。

  (2)存储过程根据需要可能会有输入、输出、输入输出参数,这里有一个输出参数s,类型是int型,如果有多个参数用","分割开。

  (3)过程体的开始与结束使用BEGIN与END进行标识。

  这样,我们的一个MySQL存储过程就完成了,是不是很容易呢?看不懂也没关系,接下来,我们详细的讲解。

  下面的例子主要用到了

  Ⅰ。 if-then -else语句

  Ⅰ。 FOUND_ROWS() 语句

  #记录每天的步行、睡眠、体重、消耗卡路里等信息

  #userRecordDetail 表中,如果存在当天数据,则修改,否则新增

  #userRecord 表中,如果存在,则累加,否则新增

  #类型:1步行2睡眠3卡路里消耗4体重

  #CALL userRecord_create(1001,45,100,1000,1000,500,500,2,1);

  DROP PROCEDURE IF EXISTS pro_userRecord_stepNum;

  DELIMITER //

  CREATE PROCEDURE pro_userRecord_stepNum(IN p_userId INT,IN p_stepNum INT)

  BEGIN

  DECLARE RCount INT;

  -- 查看用户是否有详细记录

  SELECT id FROM userRecordDetail WHERE userId = p_userId AND DATE(createTime) = CURDATE() LIMIT 1;

  SELECT FOUND_ROWS() INTO RCount;

  IF (RCount=0) THEN

  -- 查看userRecord是否有用户总记录信息,不存在,则添加,否则修改

  SELECT id FROM userRecord WHERE userId = p_userId LIMIT 1;

  SELECT FOUND_ROWS() INTO RCount;

  IF(RCount = 0 )THEN

  INSERT INTO `userRecord`(`userId`,`totalStep`,`updateTime`,`createTime`)

  VALUES (p_userId,p_stepNum,NOW(),NOW());

  ELSE

  UPDATE userRecord SET totalStep = totalStep+p_stepNum WHERE userId = p_userId;

  END IF; -- 结束

  -- 插入一条用户记录详细信息

  INSERT INTO `userRecordDetail`(`weigh`,`calorie`,`stepNum`,`userId`,

  `sleepTimes`,`lightSleepTimes`,`heavySleepTimes`,

  `wakeupNum`,`updateTime`,`createTime`)

  VALUES (0,0,p_stepNum, p_userId,0,0,0,0,NOW(),NOW());

  ELSE

  -- 查看是否有用户总记录信息,不存在,则添加,否则修改

  SELECT id FROM userRecord WHERE userId = p_userId LIMIT 1;

  SELECT FOUND_ROWS() INTO RCount;

  IF(RCount = 0 )THEN

  INSERT INTO `userRecord`(`userId`,`totalStep`,`updateTime`,`createTime`)

  VALUES (p_userId,p_stepNum,NOW(),NOW());

  ELSE

  UPDATE userRecord SET totalStep = totalStep + p_stepNum WHERE userId = p_userId;

  END IF;

  -- 修改userRecordDetail

  UPDATE userRecordDetail SET stepNum = stepNum + p_stepNum WHERE userId = p_userId;

  END IF;

  END;//

[1] [2] [3]

mysql存储过程的应用