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--

本文由 Hellohao 作者:hellohao 发表,其版权均为 Hellohao 所有,文章内容系作者个人观点,不代表 Hellohao 对观点赞同或支持。如需转载,请注明文章来源。
0

发表评论