tft每日頭條

 > 科技

 > mysql存儲過程教程

mysql存儲過程教程

科技 更新时间:2024-08-22 06:28:18

MySQL 5.0 版本開始支持存儲過程。

存儲過程(Stored Procedure)是一種在數據庫中存儲複雜程序,以便外部程序調用的一種數據庫對象。

存儲過程是為了完成特定功能的SQL語句集,經編譯創建并保存在數據庫中,用戶可通過指定存儲過程的名字并給定參數(需要時)來調用執行。

存儲過程思想上很簡單,就是數據庫 SQL 語言層面的代碼封裝與重用。

優點

  • 将重複性很高的一些操作,封裝到一個存儲過程中,簡化了對這些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輸入輸出參數:既表示調用者向過程傳入值,又表示過程向調用者傳出值(值隻能是變量)

建議:

  • 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, '陳豔蘭', '雲南');

mysql存儲過程教程(mysql存儲過程使用)1

2.不帶參數的存儲過程

#創建存儲過程 CREATE PROCEDURE select_students_count() BEGIN SELECT COUNT(*) FROM students; END; #執行存儲過程: CALL select_students_count()

mysql存儲過程教程(mysql存儲過程使用)2

3.帶參數的存儲過程

#創建存儲過程 CREATE PROCEDURE select_students_by_city(in _city VARCHAR(256)) BEGIN SELECT * FROM students where city = _city; END; #執行存儲過程: CALL select_students_by_city('上海')

mysql存儲過程教程(mysql存儲過程使用)3

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('%劉%');

mysql存儲過程教程(mysql存儲過程使用)4

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, '東北');

mysql存儲過程教程(mysql存儲過程使用)5

修改:

#創建存儲過程 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, '杭州');

mysql存儲過程教程(mysql存儲過程使用)6

删除:

#創建存儲過程 CREATE PROCEDURE delete_student_by_id (_id INT) BEGIN DELETE FROM students WHERE id = _id; END; #執行存儲過程: CALL delete_student_by_id (9);

mysql存儲過程教程(mysql存儲過程使用)7

查詢所有的存儲過程:

show procedure status where db='mcms';

mysql存儲過程教程(mysql存儲過程使用)8

查詢某個存儲過程:

SHOW CREATE PROCEDURE mcms.delete_student_by_id;

mysql存儲過程教程(mysql存儲過程使用)9

删除存儲過程

DROP PROCEDURE mcms.delete_student_by_id

,

更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!

查看全部

相关科技资讯推荐

热门科技资讯推荐

网友关注

Copyright 2023-2024 - www.tftnews.com All Rights Reserved