1. 程式人生 > >06 數據庫入門學習-視圖、sql註入、事務、存儲過程

06 數據庫入門學習-視圖、sql註入、事務、存儲過程

保存 sele .... tool 幻讀 登錄驗證 防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,無法避免間人攻擊(在你的客戶端和服務器中間加一個中轉服務器)
中間人攻擊可以繞過了客戶端的輸入限制
可以將驗證放到服務端

技術分享圖片 View Code

三、事務

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註入、事務、存儲過程