MySQL 學習教程(十七)【整理】- 代碼執行結果

參考:http://blog.csdn.net/qq_35246620/article/details/70823903

代碼執行結構

在 MySQL 編程中,代碼的執行結構有三種,分別爲:

  • 順序結構;
  • 分支結構;
  • 循環結構。

順序結構,自不必多說,在本文中,我們着重瞭解分支結構和循環結構。

分支結構

分支結構:事先準備多個代碼塊,通過判斷條件是否滿足,執行對應的代碼。

在 MySQL 中,只有if分支結構,其基本語法爲:

if 條件判斷 then
    -- 滿足條件時,要執行的代碼
else -- 可以沒有 else 語句
    -- 不滿足條件時,要執行的代碼
end if;
  • 1
  • 2
  • 3
  • 4
  • 5

接下來,我們利用觸發器和if分支,完成這樣的需求:

  • 在生成訂單前,判斷商品的庫存是否滿足,如果滿足,則插入訂單;否則,插入失敗。

依次執行如下 SQL 語句,進行測試:

-- 查看商品表
select * from goods;
-- 查看訂單表
select * from orders;
-- 修改語句結束符
delimiter $$
-- 創建觸發器
create trigger before_order before insert on orders for each row
begin
	-- 判斷商品庫存是否滿足訂單
	-- 通過商品表獲取商品庫存量
	select inventory from goods where id = NEW.goods_id into @inventory;
	-- 比較庫存
	if @inventory < NEW.goods_number then
		-- 庫存不夠,由於觸發器不能阻止事件發生,因此我們只能暴力報錯
		insert into XXX values(XXX);
	end if;
end
$$
-- 恢復語句結束符
delimiter ; 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21

01

-- 插入訂單
insert into orders values(null, 1, 1000);
-- 查看商品表
select * from goods;
-- 查看訂單表
select * from orders;
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

02

-- 插入訂單
insert into orders values(null, 1, 100);
-- 查看商品表
select * from goods;
-- 查看訂單表
select * from orders;
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

03

如上圖所示,雖然在報錯的時候,沒有給出友好的提示信息,但我們已經實現了該需求。

循環結構

循環結構:表示某段代碼在指定條件下進行重複執行動作。

在 MySQL 中,沒有for循環,僅有while循環、loop循環和repeat循環,呃,還有一種非標準的goto循環,在此我們僅介紹while循環,其基本語法爲:

while 條件判斷 do
    -- 滿足條件時要執行的代碼
    -- 變更循環條件
end while;
  • 1
  • 2
  • 3
  • 4

在使用循環結構的時候,我們經常需要對循環進行控制,即在循環結構內部進行判斷和控制。雖然在 MySQL 中沒有continuebreak,但是有其替代關鍵字:

  • iterate:迭代,類似於continue,表示結束本次循環,不執行後續步驟,直接開始下一次循環;
  • leave:離開,類似於break,直接結束整個循環。

上述兩個關鍵字的使用方法爲,

  • 基本語法iterate/leave + 循環名稱;

因此,在我們定義循環結構的時候,就需要進行略微的修改了,具體形式如下:

循環名稱: while 條件判斷 do
    -- 滿足條件時要執行的代碼
    -- 變更循環條件
    iterate/leave 循環名稱; -- 控制循環語句
end while;
  • 1
  • 2
  • 3
  • 4
  • 5

由於觸發器只能執行簡單的一次觸發動作,因此不適合演示循環結構。循環結構需要結合函數進行使用,所以在介紹函數的時候,我們再來體驗循環結構的魅力。



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章