06 數據庫入門學習-視圖、sql註入、事務、存儲過程
一、視圖
1.什麽是視圖
視圖本質是一張虛擬的表
2.為什麽要用
為了原表的安全
只要有兩大功能
1.隱藏部分數據,開放指定數據
2.視圖可以將查詢結果保存,減少sql語句的次數
特點:
1.視圖使用永久保存的,而且保存的僅僅是一條 as sql語句
2.每次對視圖的查詢,都是再次執行了保存的sql語句
3.對於視圖的任何修改都會同步到原表
3.如何使用
語法:
create view 視圖名 as select * from 原表名;
驗證:對視圖的任何修改會改變原表
驗證
二、sql註入
1.什麽是sql註入攻擊
一些了解sql語法的用戶,可以輸入一些關鍵字或合法sql,來導致原始的sql邏輯發生變化 從而跳過登錄驗證或者刪除數據庫
2.如何使用sql註入
案例一
View Code
案例二
View Code
3.如何預防sql註入漏洞
從客戶端入手,接受用戶輸入的數據時,可以加上限制,比如不能輸:-- ‘ ; where 等等
但是這樣只能避免,黑客從你的客戶端軟件註入 sql,無法避免間人攻擊(在你的客戶端和服務器中間加一個中轉服務器)
中間人攻擊可以繞過了客戶端的輸入限制
可以將驗證放到服務端
三、事務
1.什麽是事務
是一組sql語句集合
1.原子性:
事務是一個整體,要麽都執行完畢,要麽一個都沒執行
2.隔離性:
多個事務之間一定是並發的,那麽並發一定會出現問題
1.臟讀 讀取到另一個事務未提交的數據
2.不可重復讀 兩次對同一記錄的查詢結果不一致
一個事務在查詢 另一個事務在更新
3.幻讀 對同一表中的查詢結果數量不一致
一個事務在查詢 另一個事務在添加或刪除
3.一致性:
在這個事物執行完成後,事務中所進行的修改也都完成了,這樣一來就保證了數據的完整性
4.持久性
當事務執行完畢後,事務對數據的修改都是持久性的、不可恢復的
2.如何使用
#語法 #1.開啟一個事務 start transaction #2.sql語句 ........ #3.事務執行完畢後 使用commit來提交 一旦提交就不可恢復了 commit #4.在事務還未提交時我們可以使用rollback來回滾 默認回滾到事務開始前的狀態 rollback
四、存儲過程
1.什麽是存儲過程
你可以理解為mysql的編程語言
他的作用, 可以將你的程序業務邏輯放到mysql中來處理
這樣可以降低網絡訪問次數 從而提高你的程序效率
既然如此,你不能把所有與數據存儲相關的業務邏輯全都放mysql中?
能,但是對於公司而言,需要再請一個mysql開發者
對於你個人來說,提高溝通成本
2.三種開發的模型
方案一
應用程序: 處理邏輯,需要手動編寫 sql語句
mysql:
優點:執行效率高
缺點: 開發效率低
方案二
應用程序:
mysql :處理邏輯,mysql開發者來編寫,應用程序開發者不需要需要手動編寫 sql語句
優點: 應用程序開發效率高
缺點: 執行效率略低,溝通成本增高
方案三
使用 ORM(object relation map) 對象關系映射
自動幫你生成對應的sql語句,比如你要註冊用戶,本來要寫insert語句,現在使用orm調用save(用戶對象)
優點:開發效率高
缺點:執行效率降低
3.語法
delimiter //#更換mysql的換行符 create procedure 過程的名稱 ({in,out,inout} 參數名稱 數據類型) begin #具體的sql代碼 end// delimiter ; #參數前面需要指定參數的作用 #in 表示該參數用於傳入數據 #out 用於返回數據 #inout 即可傳入 也可返回
4.流程控制
if語句
if 條件 then 語句1; elseif 條件 then 語句2; else 語句3; end if;
case語句
你給我一個值 我對它進行選擇 然後執行匹配上的語句
case 變量名 when 值1 then 語句1; when 值2 then 語句2; when 值3 then 語句3; else 語句4; end case;
while語句
WHILE 條件 DO 語句..... end WHILE;
06 數據庫入門學習-視圖、sql註入、事務、存儲過程