1.SQL語句
1.數據行
1.臨時表 () as A
2.指定映射
select id,name 1,sum(x) from t1
3.條件
case when id>8 then xx else xx end
4.三元運算
if(isnull(xx),0,1)
5.where xx group by xx
2.上節練習
基於用戶的權限管理————表的結構,致使某些操做較爲複雜
基於角色的權限管理
1.用戶信息表
2.權限類型表
3.角色表
4.角色權限管理
1.union——上下連表,自動去重
union all——上下連表,不去重
2.視圖
1.create view xx as SQL語句
alter view xx as SQL語句
drop view xx
3.觸發器
當對某張表進行:增刪改查時,使用觸發器自定義關聯行爲
new 新數據
old 老數據
4.函數
1.內置函數
執行函數:select xx();
經常使用:date_format
2.自定義函數
5.存儲過程(比前面的重要一點)
1.保存在MySQL上的一個別名--->一坨SQL語句
2.調用
別名()
3.用來替代程序員寫SQL語句
4.方式一:
Mysql:存儲過程
程序員:調用存儲過程
方式二:
Mysql:檢查
程序員:SQL語句
方式三:
Mysql:。。
程序員:框架(類和對象--->SQL語句)
5. 語句
1.不含參數
2.含參(in)
3.含參(out)
6.特色
1.可傳參: in,out,inout
2.既有返回結果,又有返回值
7.能夠經過代碼,支持事務
8.遊標cursor 實現循環操做
9.動態執行SQL,防注入
1.觸發器程序員
delimiter // create trigger xx before insert on student for each row begin insert into teacher(tname) values ('sss'); end // delimiter ;
2.自定義函數sql
-- SET GLOBAL log_bin_trust_function_creators = 1; delimiter // create function f1( i1 int, i2 int) returns int begin declare num int default 0; set num = i1+i2; return(num); end // delimiter ;
3.存儲過程框架
delimiter // CREATE procedure p3( in i1 int, out i2 int ) BEGIN set i2 = 123123; SELECT * from student where sid >i1 and sid <i2; end // delimiter ; set @v1 = 0; SELECT @v1; call p3(12,@v1); SELECT @v1
4.存儲過程,實現事務操做函數
delimiter \\ create PROCEDURE p1( OUT p_return_code tinyint ) BEGIN DECLARE exit handler for sqlexception BEGIN -- ERROR set p_return_code = 1; rollback; END; DECLARE exit handler for sqlwarning BEGIN -- WARNING set p_return_code = 2; rollback; END; START TRANSACTION; DELETE from tb1; insert into tb2(name)values('seven'); COMMIT; -- SUCCESS set p_return_code = 0; END\\ delimiter ;
5.存儲過程,實現循環,遊標oop
delimiter // CREATE procedure p6() BEGIN declare row_id int; declare row_num int; declare temp int; declare done int default false; declare my_cursor CURSOR for select id,num from a; declare continue handler for not found set done=true; open my_cursor; xx:loop fetch my_cursor into row_id, row_num; if done then leave xx; end if; set temp=row_id+row_num; insert into b(num) values (temp); end loop xx; close my_cursor; end // delimiter ; call p6()
6.動態執行SQL,防SQL注入學習
delimiter \\ DROP PROCEDURE IF EXISTS proc_sql \\ CREATE PROCEDURE proc_sql () BEGIN declare p1 int; set p1 = 11; set @p1 = p1; PREPARE prod FROM 'select * from tb2 where nid > ?'; EXECUTE prod USING @p1; DEALLOCATE prepare prod; END\\ delimiter ;