MySQL 5.0 版本開始支持存儲過程。
存儲過程(Stored Procedure)是一種在數據庫中存儲複雜程序,以便外部程序調用的一種數據庫對象。
存儲過程是為了完成特定功能的SQL語句集,經編譯創建并保存在數據庫中,用戶可通過指定存儲過程的名字并給定參數(需要時)來調用執行。
存儲過程思想上很簡單,就是數據庫 SQL 語言層面的代碼封裝與重用。
優點
缺點
創建存儲過程
CREATE
[DEFINER = { user | CURRENT_USER }]
PROCEDURE sp_name ([proc_parameter[,...]])
[characteristic ...] routine_body
proc_parameter:
[ IN | OUT | INOUT ] param_name type
characteristic:
COMMENT 'string'
| LANGUAGE SQL
| [NOT] DETERMINISTIC
| { CONTAINS SQL | NO SQL | READS SQL DATA | MODIFIES SQL DATA }
| SQL SECURITY { DEFINER | INVOKER }
routine_body:
Valid SQL routine statement
[begin_label:] BEGIN
[statement_list]
……
END [end_label]
存儲過程的參數
MySQL存儲過程的參數用在存儲過程的定義,共有三種參數類型,IN,OUT,INOUT,形式如:
CREATEPROCEDURE 存儲過程名([[IN |OUT |INOUT ] 參數名 數據類形...])
3種參數類型:
IN輸入參數:表示調用者向過程傳入值(傳入值可以是字面量或變量)
OUT輸出參數:表示過程向調用者傳出值(可以返回多個值)(傳出值隻能是變量)
INOUT輸入輸出參數:既表示調用者向過程傳入值,又表示過程向調用者傳出值(值隻能是變量)
建議:
1.首先創建一張 students 表
create table students(
id int primary key auto_increment,
age int,
name varchar(20),
city varchar(20)
) character set utf8;
insert into students values(null, 22, '趙四', '杭州');
insert into students values(null, 16, '劉能', '上海');
insert into students values(null, 20, '謝廣坤', '深圳');
insert into students values(null, 21, '劉美蘭', '北京');
insert into students values(null, 20, '宋曉峰', '湖北');
insert into students values(null, 21, '謝大腳', '江蘇');
insert into students values(null, 20, '蘇玉紅', '天津');
insert into students values(null, 21, '陳豔蘭', '雲南');
2.不帶參數的存儲過程
#創建存儲過程
CREATE PROCEDURE select_students_count()
BEGIN
SELECT COUNT(*) FROM students;
END;
#執行存儲過程:
CALL select_students_count()
3.帶參數的存儲過程
#創建存儲過程
CREATE PROCEDURE select_students_by_city(in _city VARCHAR(256))
BEGIN
SELECT * FROM students where city = _city;
END;
#執行存儲過程:
CALL select_students_by_city('上海')
4.帶有輸出參數的存儲過程
#創建存儲過程
CREATE PROCEDURE select_students_by_name(
IN _name VARCHAR(256),
OUT _city VARCHAR(256),
INOUT _age int(11)
)
BEGIN
SELECT city FROM students WHERE name = _name
AND
age = _age into _city;
END;
#執行存儲過程:
set @_age = 20;
set @_name = '謝廣坤';
call select_students_by_name(@_name, @_city, @_age);
select @_name as name,@_city as city, @_age as age;
5.帶有通配符的存儲過程
#創建存儲過程
CREATE PROCEDURE select_students_by_likename (IN _likename nvarchar(255))
BEGIN
SELECT
*
FROM
students
WHERE
NAME LIKE _likename;
END;
#執行存儲過程:
call select_students_by_likename('%劉%');
6.使用存儲過程進行增加、修改、删除
增加:
#創建存儲過程
CREATE PROCEDURE insert_student (
_id INT,
_name nvarchar (255),
_age INT,
_city nvarchar (255)
)
BEGIN
INSERT INTO students (id, NAME, age, city)
VALUES
(_id, _name, _age, _city);
END;
call insert_student(9, '瓶底子', 19, '東北');
修改:
#創建存儲過程
CREATE PROCEDURE update_student (
_id INT,
_name nvarchar (25),
_age INT,
_city nvarchar (25)
)
BEGIN
UPDATE students
SET NAME = _name,
age = _age,
city = _city
WHERE
id = _id;
END;
#執行存儲過程:
call update_student(9, '李大個', 22, '杭州');
删除:
#創建存儲過程
CREATE PROCEDURE delete_student_by_id (_id INT)
BEGIN
DELETE
FROM
students
WHERE
id = _id;
END;
#執行存儲過程:
CALL delete_student_by_id (9);
查詢所有的存儲過程:
show procedure status where db='mcms';
查詢某個存儲過程:
SHOW CREATE PROCEDURE mcms.delete_student_by_id;
删除存儲過程
DROP PROCEDURE mcms.delete_student_by_id
更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!