第一部分、視圖
視圖保存的是一段select查詢語句,不保存實際數據,視圖可以被當成一張表來查看,也可以增刪改,會直接操作到原來的表上(只限於涉及單表的視圖)。
視圖保存的是創建時的狀態,如果修改了原表,視圖不變動,但是如果刪除某個字段,視圖會報錯。
create view v_name as select * from students; select * from v_name; drop view v_name;
第二部分、函數
函數就是用來對數據進行一些操作的函數。
一、操作符
between .. and ... is null in (xx,xx,xx)
二、常用函數
greatest(10,20) # 返回最大值 isnull(10) # 是否為null substring(str, 2, 3) # 截取字符串從第二位開始的3位字符 char_length(str) # 返回字符串長度 concat(str1, str2, str3) # 拼接字符串 concat_ws(',', str1, str2) # 用,拼接字符串 insert(str, 3, 4, xx) # 將3-4為用xx替代 instr(str, xx) # 第一次出現xx的位置 lower(xx) ltrim(xx) # 去除左邊的空白 repeat(xx, 3) # 重復三次 replace(xx, xx, xx) # 替換
三、邏輯語句
if(xx1, xx2, xx3) # 如果xx1為true則返回xx2,否則返回xx3 ifnull(xx, str) # 如果xx為null則返回str case gender when 1 then 'male' else 'female' end;
四、自定義函數
delimiter // create function xxx(s CHAR(32)) RETURNS CHAR(32)
begin RETURN concat('hello', s); end //
delimiter ;
第三部分、存儲過程
存儲過程保存一段sql語句,通過call調用
delimiter // create procedure xxx(IN param1 int, OUT param2 int) begin select count(*) INTO param2 from xxx where xx>param1; end // delimiter ;
declare用來定義內部變量,但是只允許出現在begin后的第一行。
delimiter // create procedure xxx(sid INT) begin declare x default 10; declare xname, xgender; select sname, gender INTO xname, xgender from xxx where sid=x; end // delimiter ;
第四部分、觸發器
觸發器就是讓mysql取監聽某個事件,當發生這個事件時就執行某些命令。
DELIMITER ;; create trigger trigger_name before/after insert on tablename for each row begin xxxx end; DELIMITER ;
第五部分、流程控制語句
一、if
if m > n then set s = '>'; elseif m = n then set s = '='; else set s = '<'; end if;
二、case
方式一 case gender when 0 then 'male' when 1 then 'female' end case; 方式二 case when gender=0 then 'male' when gender != 0 then 'female' end case;
三、while
while xx do xxxx; end while;
四、repeat
repeat xxxx; until xxxx end repeat;