版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_33330334/article/details/79227584
MySql存储过程简单总结。
CREATE TABLE `STUDENT`
(
`ID` VARCHAR(50) NOT NULL,
`NAME` VARCHAR(50) NOT NULL,
`AGE` INT(3) NOT NULL,
`CITY` VARCHAR(100) NULL
)ENGINE=InnoDB DEFAULT CHARSET=utf8;
INSERT INTO STUDENT(ID,NAME,AGE,CITY) VALUES(UUID(),'李四',20,'广东深圳1');
INSERT INTO STUDENT(ID,NAME,AGE,CITY) VALUES(UUID(),'王五',22,'广东深圳2');
INSERT INTO STUDENT(ID,NAME,AGE,CITY) VALUES(UUID(),'张三',23,'广东深圳3');
INSERT INTO STUDENT(ID,NAME,AGE,CITY) VALUES(UUID(),'刘星',24,'广东深圳4');
-- 1, 创建不带参数的存储过程
DROP PROCEDURE IF EXISTS select_students_count; -- 没有括号()
CREATE PROCEDURE `select_students_count`()
BEGIN
SELECT count(*) from STUDENT;
END;
-- 调用
call select_students_count();
-- 2, 创建带参数的存储过程
DROP PROCEDURE IF EXISTS select_students_count; -- 没有括号()
CREATE PROCEDURE `select_students_count`(
in _name varchar(225)
)
BEGIN
SELECT count(*) from STUDENT WHERE `NAME` =_NAME;
END;
-- 调用
call select_students_count('李四');
-- 3, 带有输出参数的存储过程
DROP PROCEDURE IF EXISTS select_students_by_name; -- 没有括号()
CREATE PROCEDURE `select_students_by_name`(
in _name varchar(225),-- 输入参数
out _city varchar(225),-- 输出参数
INOUT _age int(3) -- 输入输出参数
)
BEGIN
SELECT city from STUDENT WHERE `NAME` =_NAME AND `AGE` = _age INTO _city;
END;
-- 调用
set @_age = 20;
set @_name = '李四';
call select_students_by_name(@_name, @_city, @_age);
select @_city as city, @_age as age;
-- 4 ,带有通配符的存储过程
DROP PROCEDURE IF EXISTS SELECT_STUBY_LIKENAME;
CREATE PROCEDURE `SELECT_STUBY_LIKENAME`
(
IN _LIKENAME VARCHAR(20)
)
BEGIN
SELECT * FROM STUDENT WHERE NAME LIKE _LIKENAME;
END;
call SELECT_STUBY_LIKENAME('%王%');
-- 存储过程增删改查
-- 1,增加
DROP PROCEDURE IF EXISTS `INSERT_STUDENT`;
CREATE PROCEDURE `INSERT_STUDENT`(
_ID VARCHAR(50),
_NAME VARCHAR(50),
_AGE INT(3),
_CITY VARCHAR(50)
)
BEGIN
INSERT INTO STUDENT(ID,NAME,AGE,CITY) VALUES(_ID,_NAME,_AGE,_CITY);
END;
CALL INSERT_STUDENT(UUID(),'王小二',36,'东莞');
-- 2,修改学生信息
DROP PROCEDURE IF EXISTS UPDATE_STUDENT;
CREATE PROCEDURE UPDATE_STUDENT(
_ID VARCHAR(50),
_NAME VARCHAR(50),
_AGE INT(3),
_CITY VARCHAR(50)
)
BEGIN
UPDATE STUDENT SET NAME=_NAME,AGE=_AGE,CITY=_CITY WHERE ID =_ID;
END;
CALL UPDATE_STUDENT('c1a5ed9f-0713-11e8-951d-f48e387783d2','王五',18,'北京');
SELECT * FROM STUDENT;
-- 3, 删除
DROP PROCEDURE IF EXISTS DELETE_STUDENT;
CREATE PROCEDURE DELETE_STUDENT(
_ID VARCHAR(50)
)
BEGIN
DELETE T FROM STUDENT T WHERE T.ID=_ID;
END;
CALL DELETE_STUDENT('26b78a86-0704-11e8-951d-f48e387783d2');