Mysql學習歷程(19)-代碼和函數

代碼執行結構:順序結構  分支結構  循環結構

分支結構:實現準備多個代碼塊,按照條件選擇性執行某段代碼;

在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  ;


循環結構:某段代碼在指定條件執行重複執行;沒有for循環

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關鍵字;






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