MySQL中的存儲(chǔ)過程是一段預(yù)編譯的SQL代碼,可以用于執(zhí)行一系列的操作。存儲(chǔ)過程可以接收參數(shù),也可以返回結(jié)果,是MySQL中非常強(qiáng)大的一項(xiàng)功能。
存儲(chǔ)過程是直接存儲(chǔ)在MySQL中的,可以像表、索引等一樣被管理和維護(hù)。一旦創(chuàng)建了存儲(chǔ)過程,可以隨時(shí)調(diào)用執(zhí)行。
MySQL的存儲(chǔ)過程代碼是存放在數(shù)據(jù)庫(kù)中的。在MySQL中,存儲(chǔ)過程可以存放在任何一個(gè)數(shù)據(jù)庫(kù)中。當(dāng)然,也可以在同一個(gè)數(shù)據(jù)庫(kù)中創(chuàng)建多個(gè)存儲(chǔ)過程。
下面是一個(gè)簡(jiǎn)單的存儲(chǔ)過程,用于查詢學(xué)生表中的數(shù)據(jù):
DELIMITER // CREATE PROCEDURE Query_Student ( IN stu_name VARCHAR(20), OUT stu_age INT ) BEGIN SELECT age INTO stu_age FROM student WHERE name = stu_name; END // DELIMITER ;
CREATE PROCEDURE語(yǔ)句用于創(chuàng)建存儲(chǔ)過程。存儲(chǔ)過程的名稱為Query_Student,在括號(hào)中定義了兩個(gè)參數(shù),IN類型的參數(shù)stu_name和OUT類型的參數(shù)stu_age。存儲(chǔ)過程的主體是BEGIN和END之間的SQL語(yǔ)句,執(zhí)行的內(nèi)容是查詢student表中指定stu_name的學(xué)生年齡,并將結(jié)果存儲(chǔ)在stu_age變量中。
DELIMITER //和DELIMITER ;是MySQL命令行客戶端中為了允許在存儲(chǔ)過程中使用多條SQL語(yǔ)句而使用的命令。這兩條命令用于告訴MySQL客戶端存儲(chǔ)過程的開始和結(jié)束。
存儲(chǔ)過程的執(zhí)行非常簡(jiǎn)單,可以使用CALL語(yǔ)句來調(diào)用,如下所示:
CALL Query_Student('小明',@age); SELECT @age;
CALL語(yǔ)句用于調(diào)用存儲(chǔ)過程。調(diào)用的時(shí)候,需要傳入Query_Student需要的參數(shù),即stu_name的值。執(zhí)行完后,可使用SELECT語(yǔ)句查看stu_age的值。