Mysql存储过程的基本用法

  • A+
所属分类:MySQL 编程

存储过程是我们java开发中操作数据库经常使用的内容,所以要熟练掌握mysql中的存储过程很重要。下面我简单写几种常用最基本的存储过程写法。

1.通过id删除指定数据

DELETE PROCEDURE IF EXISTS dele_user; -- 创建存储过程前先判断是否存在,如果存在就删除。

DELIMITER //  -- 创建定界符改为两条斜线
CREATE PROCEDURE dele_user(IN ids INT UNSIGNED) -- 定义存储过程名字dele_user和要输入的值ids
BEGIN
DELETE FROM USER WHERE id=ids;
END
//
DELIMITER ; -- 还原定界符为;

以上存储过程就建好了,接下来用关键字CALL调用存储过程

-- 调用存储过程
CALL dele_user(5); -- 表示删除ID是5的数据

2.再写一个带返回值的:删除指定数据并返回剩余条数

DELIMITER //  -- 创建定界符改为两条斜线
CREATE PROCEDURE get_dele_user(IN ids INT UNSIGNED,OUT nums INT UNSIGNED) -- 定义存储过程名字dele_user和要输入的值ids
BEGIN
DELETE FROM USER WHERE id=ids;
SELECT COUNT(*) FROM USER INTO nums; -- into:把select查询到的总数放到nums返回值里边
END
//
DELIMITER ;

然后再次调用存储过程

-- 调用并接受返回值
CALL get_dele_user(4,@getuser); -- 参数一为指定删除的ID,参数二为接受返回值 剩余条数
SELECT @getuser; -- 然后把剩余条数打印出来

3.综上所述下边写一个稍微复杂的存储过程+事物的综合写法。
添加多表数据如果其中一条数据出现错误然后回滚,并调用返回值。-2:出错-1:异常0:成功

DELIMITER $$  -- 把定界符改为$$ 两条斜线也行

USE `ftt_edu_db`$$

DROP PROCEDURE IF EXISTS `sp_add_School`$$

CREATE DEFINER=`root`@`localhost` PROCEDURE `sp_add_School`(
IN `id` INT(4),
IN `UserName` VARCHAR(50),
IN `Password` VARCHAR(50),
IN `Role_ID` INT(5),
IN `AddTime` TIMESTAMP,
IN `Email` VARCHAR(50),
IN `State` INT(4),
IN `Is_Bad` INT(4),
IN `Is_Identity` VARCHAR(50),
IN `Check_Users` VARCHAR(20),
IN `Area_ID` INT(4),
IN `Photo_Path` VARCHAR(200),
IN `Remark` VARCHAR(500),

IN Ids INT(4),
IN User_Id INT(4),
IN NAME VARCHAR(50),
IN ContactName VARCHAR(50),
IN phone VARCHAR(50),
IN fax VARCHAR(50),
IN country VARCHAR(50),
IN recordNumber VARCHAR(100),
IN sstate INT(4),
IN recommand_Type INT(4), 
OUT p_return_code INT
)
BEGIN
 DECLARE EXIT HANDLER FOR SQLEXCEPTION
 BEGIN
   SET p_return_code=-2;
   ROLLBACK;
 END;
 DECLARE EXIT HANDLER FOR SQLWARNING
 BEGIN
 SET p_return_code=-1;
   ROLLBACK;
 END;
START TRANSACTION;
INSERT INTO fkt_sys_user VALUES(`id`,`username`,`Password`,`Role_ID`,`AddTime`,`Email`,`State`,`Is_Bad`,`Is_Identity`,`Check_Users`,`Area_ID`,`Photo_Path`,`Remark`);
INSERT INTO fkt_company_school VALUES(Ids,User_Id,NAME,ContactName,phone,fax,country,recordNumber,sstate,recommand_Type);
COMMIT;
SET p_return_code=0;
END$$

DELIMITER ;

调用

CALL sp_add_School(3,'shihao4','666',1,NOW(),'923453645@qq.com',1,0,'UUID_text',NULL,'10086','/statics/img/shihao01.png','这是备注',2,3,'海啸科技','单位联系人','15555555555','123456','中国','NO123465',1,3,@p_return_code);

SELECT @p_return_code; -- 查询返回值

--END--

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: