代碼執行結構:順序結構 分支結構 循環結構
分支結構:實現準備多個代碼塊,按照條件選擇性執行某段代碼;
在mysq中只有if分支
基本語法 if 條件判斷 then
-- 滿足條件執行的代碼;
else
-- 不滿足條件執行代碼;
end if;
delimiter %%
create trigger before_order before insert on t_order for each row
begin
-- 判斷商品庫存是否夠
-- 獲取商品庫存
select total from t_product where id=new.pid into @total;
if @total<new.amount then
-- 庫存不足 觸發器沒有提供一個可以阻止事件發生的能力(暴力報錯)
insert into XXX values(xxxx);
end if;
end
%%
delimiter ;
while循環語法
while 條件判斷 do -- 滿足條件要執行的代碼
-- 變更循環條件
end while;
循環控制:在循環內部進行循環判斷和控制;
Mysql中沒有continue和break 但是有替代品
iterate迭代 類似continue 後面代碼不執行 循環重新來過
leave離開 類似break 整個循環結束
使用方式:iterate /leave 循環名字
循環名字:while 條件 do
-- 循環體
-- 循環控制
leave/iterate 循環名字;
end while;
函數分爲兩類:系統函數和自定義函數
系統函數:系統定義好的函數,直接調用即可;
任何函數都有返回值,函數的調用是通過select 調用;
mysql中字符串的基本操作單位是字符
substring(字符串,起始位置,結束位置)
char_length();
length();返回字節長度
instr();判斷字符串在某個具體字符串中存在,存在返回位置,不存在返回0
lpad();左填充,將字符串按某個指定的填充方式填充到指定長度(字符)
insert;替換 找到目標位置制定長度的字符串替換成目標字符串;
strcmp:字符串比較,不區分大小寫,小於返回-1,等於返回0,大於返回1;
自定義函數
語法:create function 函數名([形參列表]) returns 數據類型 -- 規定要返回的數據類型
begin
-- 函數體
-- 返回值:return 類型(指定數據類型)
end
自定義函數與系統函數調用方式是一樣的:select 函數名([實參列表]);
查看所有函數 show function status [like 'pattern'];
函數屬於數據庫只有對應數據庫纔可以使用;
查看函數創建語句 show create function函數名;
函數只能先刪除後新增,不能修改
drop function 函數名;
計算1-指定數之和
delimiter $$
create function display1(int_1 int) returns int
begin
set @i=1;
set @res=0;
while @i<=int_1 do
set @res = @res+@i;
set @i =@i+1;
end while;
return @res;
end
$$
delimiter ;
函數內部定義變量@res在函數外部也可以訪問
作用域:mysql中作用域與js完全一樣;全局變量可以在任何地方使用,局部變量只能在函數內部使用;
全局變量:使用set關鍵字定義,使用@符號標誌;
局部變量:使用declare關鍵字聲明,沒有@符號;
所有局部變量必須聲明在函數體開始之前,局部變量賦值也要使用set關鍵字;