/* 該代碼是創建了一個名叫"p4"的存儲過程並設置了s1,s2,s3兩個int型一個varchar型參數,還可以是其他數據類型,內部創建了x1,x2兩個變量 DELIMITER是修改分隔符的 DELIMITER $$的意思是把默認分隔符";"換成"$$",這樣分段寫的存儲過程就能整個被執行,而不是被當成多條sql語句單獨執行 創建完過程再將分隔符改回成";" 兩種創建變量並賦值的方式 SET @變量名 = 值; SELECT 值 INTO @變量名; 使用變量前必須先運行該變量賦值語句 過程內部還可以通過 "DECLARE 變量名 類型(字符串型要加范圍) DEFAULT 值;" 來創建變量,但如此創建的變量只能在該過程內部訪問 存儲過程只有三種類型參數 IN,OUT,INOUT 調用過程時過程有幾個參數傳幾個參數,只是IN型的參數可以傳的是變量,可以是常量,而OUT和INOUT型的參數傳的必須是變量 傳給out,inout參數的變量值會隨着在過程中改變在外部也改變,而給in參數的變量外部值則不受過程內變量值改變的影響 */ DELIMITER $$ DROP PROCEDURE IF EXISTS `p4`$$ CREATE PROCEDURE `p4`(IN s1 INT,OUT s2 INT,INOUT s3 VARCHAR(10)) BEGIN DECLARE x1 VARCHAR(10) DEFAULT 'this is x1'; DECLARE x2 VARCHAR(10) DEFAULT 'this is x2'; SET s1 = 11; SET s2 = 22; SET s3 = 'iss3'; /* if語法 */ IF s1 = 11 AND s2 = 12 THEN SELECT s1,s2; END IF; IF s3 = 's3' OR s1 = s2 THEN SELECT s3; ELSE SELECT s1,s2,s3; END IF; /* case語法 */ CASE s3 WHEN 's1' THEN SELECT 'this is s1'; WHEN 's2' THEN SELECT 'this is s2'; ELSE SELECT 'this is s3'; END CASE; /* while循環 */ WHILE s1>1 DO SET s1=s1-1; END WHILE; SELECT s1; /* repeat循環語句 與while不同的是while滿足條件就執行,repeat始終執行直到滿足條件終止 */ REPEAT SET s1 = s1-1; UNTIL s1=1 END REPEAT; SELECT s1; /* LOOP循環 LOOP沒有循環條件,會不停的循環直到遇到 "LEAVE ZiDingYi;" "ZiDingYi"是自定義的LOOP標記 */ ZiDingYi:LOOP SET s1 = s1+1; IF s1 = 5 THEN LEAVE ZiDingYi; END IF; END LOOP; SELECT s1; END$$ DELIMITER ; SET @p_in=1; SET @p_out=2; SET @p_inout = 's3'; SELECT 'Hello World1' INTO @p_4; /*調用存儲過程*/ CALL p4(@p_in,@p_out,@p_inout); SELECT @p_in,@p_out,@p_inout,@p_4; /* 存儲過程如果只有一個語句則語句不用 begin...end包圍 存儲過程中可以直接使用外部定義的變量 存儲過程中用set和select定義的變量就是全局的,執行該過程后內部用set和select定義的變量外部可以訪問,其他過程也可以直接使用 */ CREATE PROCEDURE p1() SET @var='p1'; CREATE PROCEDURE p2() SELECT CONCAT('Last procedure was ',@var); CALL p1(); CALL p2(); SELECT @var; CREATE PROCEDURE p3() SELECT CONCAT(@p3_var,' World'); SET @p3_var='Hello'; CALL p3(); /*刪除存儲過程*/ DROP PROCEDURE p4; /*或者*/ DROP PROCEDURE IF EXISTS `p4` /*查看該數據庫下有哪些存儲過程 test為數據庫名*/ SELECT NAME FROM mysql.proc WHERE db='test'; /*或者*/ SHOW PROCEDURE STATUS WHERE db='test'; /*查看存儲過程詳細信息,包括創建語句*/ SHOW CREATE PROCEDURE p4;