基礎查詢
首先創建一張students學生表,增加字段與插入數據如下

創建不帶參數的存儲過程
查看學生個數
DROP PROCEDURE IF EXISTS select_students_count; -- 沒有括號()
DELIMITER ;; CREATE PROCEDURE `select_students_count`() BEGIN SELECT count(id) from students; END;; DELIMITER ;
執行存儲過程
call select_students_count();

帶參數的存儲過程
根據城市查詢總數
DROP PROCEDURE IF EXISTS select_students_by_city_count;
DELIMITER ;; CREATE PROCEDURE `select_students_by_city_count`( in _city varchar(225) ) BEGIN SELECT count(id) from students where city = _city; END;; DELIMITER ;
執行存儲過程
call select_students_by_city_count('杭州');

帶有輸出參數的存儲過程
根據姓名查詢的學生信息,返回學生的城市
DROP PROCEDURE IF EXISTS select_students_by_name;
DELIMITER ;; CREATE PROCEDURE `select_students_by_name`( in _name varchar(225), -- 輸入參數 out _city varchar(225), -- 輸出參數 inout _age int(11) -- 輸入輸出參數 ) BEGIN SELECT city from students where name = _name and age = _age into _city; END;; DELIMITER ;
執行存儲過程
set @_age = 20; set @_name = 'jack'; call select_students_by_name(@_name, @_city, @_age); select @_city as city, @_age as age;

MySQL支持IN(傳遞給存儲過程),OUT(從存儲過程傳出)和INOUT(對存儲過程傳入和傳出)類型的參數。存儲過程的代碼位於BEGIN和END語句內,如前所見,它們是一系列SELECT語句,用來檢索值,然后保存到相應的變量(通過指定INTO關鍵字)
帶有通配符的存儲過程
通配符,在參數值賦值時,加上相應的通配符
DROP PROCEDURE IF EXISTS select_students_by_likename;
DELIMITER ;; CREATE PROCEDURE `select_students_by_likename`( in _likename varchar(225) ) BEGIN set _likename = '%s%'; -- 默認值 SELECT * from students where name like _likename; END;; DELIMITER ;
執行存儲過程
call select_students_by_likename('%s%');

使用存儲過程進行增刪改
新增
新增學生信息
DROP PROCEDURE IF EXISTS insert_student;
DELIMITER ;; CREATE PROCEDURE `insert_student`( _id int, _name varchar(225), _age int, _city varchar(225) ) BEGIN INSERT INTO students(ID,name,age,city) VALUES(_id,_name,_age,_city); END;; DELIMITER ;
執行存儲過程
call insert_student(5,'張三',19,'上海');
執行完后表中就多了一條數據

修改
根據學生ID,更新學生信息
DROP PROCEDURE IF EXISTS update_student;
DELIMITER ;; CREATE PROCEDURE `update_student`( _id int, _name varchar(225), _age int, _city varchar(225) ) BEGIN UPDATE students SET name=_name, age=_age, city=_city where ID = _id; END;; DELIMITER ;
執行存儲過程
call update_student(5,'amy',22,'杭州');

刪除
根據ID,刪除某學生記錄
DROP PROCEDURE IF EXISTS delete_student_by_id;
DELIMITER ;; CREATE PROCEDURE `delete_student_by_id`( _id int ) BEGIN DELETE FROM students where ID = _id; END;; DELIMITER ;
執行存儲過程
call delete_student_by_id(5);
students表中id為5的那條記錄就刪除啦!
