mysql中的流程控制結構

一、分支結構

1.if函數
	語法:if(條件,值1,值2)
	功能:實現雙分支
	應用在begin end中或外面
	
2.case結構
	語法:
	情況1:類似於switch
	case 變量或表達式
	when 值1 then 語句1;
	when 值2 then 語句2;
	...
	else 語句n;
	end 
		
	情況2:
	case 
	when 條件1 then 語句1;
	when 條件2 then 語句2;
	...
	else 語句n;
	end 
		
	應用在begin end 中或外面
	
3.if結構
	語法:
	if 條件1 then 語句1;
	elseif 條件2 then 語句2;
	....
	else 語句n;
	end if;
	功能:類似於多重if
	
	只能應用在begin end 中

4.案例演示

	案例1:創建函數,實現傳入成績,如果成績>90,返回A,如果成績>80,返回B,如果成績>60,返回C,否則返回D

		CREATE FUNCTION test_if(score FLOAT) RETURNS CHAR
		BEGIN
			DECLARE ch CHAR DEFAULT 'A';
			IF score>90 THEN SET ch='A';
			ELSEIF score>80 THEN SET ch='B';
			ELSEIF score>60 THEN SET ch='C';
			ELSE SET ch='D';
			END IF;
			RETURN ch;
		END $
		
		SELECT test_if(87)$
		
	案例2:創建存儲過程,如果工資<2000,則刪除,如果5000>工資>2000,則漲工資1000,否則漲工資500
	
	
		CREATE PROCEDURE test_if_pro(IN sal DOUBLE)
		BEGIN
			IF sal<2000 THEN DELETE FROM employees WHERE employees.salary=sal;
			ELSEIF sal>=2000 AND sal<5000 THEN UPDATE employees SET salary=salary+1000 WHERE employees.`salary`=sal;
			ELSE UPDATE employees SET salary=salary+500 WHERE employees.`salary`=sal;
			END IF;
			
		END $
		
		CALL test_if_pro(2100)$
		
	案例3:創建函數,實現傳入成績,如果成績>90,返回A,如果成績>80,返回B,如果成績>60,返回C,否則返回D

		CREATE FUNCTION test_case(score FLOAT) RETURNS CHAR
		BEGIN 
			DECLARE ch CHAR DEFAULT 'A';
			
			CASE 
			WHEN score>90 THEN SET ch='A';
			WHEN score>80 THEN SET ch='B';
			WHEN score>60 THEN SET ch='C';
			ELSE SET ch='D';
			END CASE;
			
			RETURN ch;
		END $
		
		SELECT test_case(56)$

二、循環結構

1.分類
	while、loop、repeat
	
2.循環控制
	iterate類似於 continue,繼續,結束本次循環,繼續下一次
	leave 類似於  break,跳出,結束當前所在的循環
	
3.while
	語法:
	
	【標籤:】while 循環條件 do
		循環體;
	end while【 標籤】;
	
	聯想:
	
	while(循環條件){
	
		循環體;
	}
	
4.loop
	語法:
	【標籤:】loop
		循環體;
	end loop 【標籤】;
	
	可以用來模擬簡單的死循環
	
5.repeat
	語法:
	【標籤:】repeat
		循環體;
	until 結束循環的條件
	end repeat 【標籤】;

6.案例演示
	1.沒有添加循環控制語句
		案例:批量插入,根據次數插入到admin表中多條記錄
		DROP PROCEDURE pro_while1$
		CREATE PROCEDURE pro_while1(IN insertCount INT)
		BEGIN
			DECLARE i INT DEFAULT 1;
			WHILE i<=insertCount DO
				INSERT INTO admin(username,`password`) VALUES(CONCAT('Rose',i),'666');
				SET i=i+1;
			END WHILE;
			
		END $
		
		CALL pro_while1(100)$
		
	2.添加leave語句
		案例:批量插入,根據次數插入到admin表中多條記錄,如果次數>20則停止
			TRUNCATE TABLE admin$
			DROP PROCEDURE test_while1$
			CREATE PROCEDURE test_while1(IN insertCount INT)
			BEGIN
				DECLARE i INT DEFAULT 1;
				a:WHILE i<=insertCount DO
					INSERT INTO admin(username,`password`) VALUES(CONCAT('xiaohua',i),'0000');
					IF i>=20 THEN LEAVE a;
					END IF;
					SET i=i+1;
				END WHILE a;
			END $
			
			
			CALL test_while1(100)$
			
	3.添加iterate語句
		案例:批量插入,根據次數插入到admin表中多條記錄,只插入偶數次
			TRUNCATE TABLE admin$
			DROP PROCEDURE test_while1$
			CREATE PROCEDURE test_while1(IN insertCount INT)
			BEGIN
				DECLARE i INT DEFAULT 0;
				a:WHILE i<=insertCount DO
					SET i=i+1;
					IF MOD(i,2)!=0 THEN ITERATE a;
					END IF;
					
					INSERT INTO admin(username,`password`) VALUES(CONCAT('xiaohua',i),'0000');
					
				END WHILE a;
			END $
			
			CALL test_while1(100)$
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章