电竞比分网-中国电竞赛事及体育赛事平台

分享

06 數(shù)據(jù)庫入門學(xué)習(xí)-視圖、sql注入、事務(wù)、存儲過程

 印度阿三17 2019-02-07

一、視圖

1.什么是視圖

  視圖本質(zhì)是一張?zhí)摂M的表

2.為什么要用

  為了原表的安全
  只要有兩大功能
    1.隱藏部分數(shù)據(jù),開放指定數(shù)據(jù)
    2.視圖可以將查詢結(jié)果保存,減少sql語句的次數(shù)
  特點:
  1.視圖使用永久保存的,而且保存的僅僅是一條 as sql語句
  2.每次對視圖的查詢,都是再次執(zhí)行了保存的sql語句
  3.對于視圖的任何修改都會同步到原表

3.如何使用

  語法:

create view 視圖名 as select * from 原表名;

  驗證:對視圖的任何修改會改變原表

 驗證

 

 

二、sql注入

1.什么是sql注入攻擊

一些了解sql語法的用戶,可以輸入一些關(guān)鍵字或合法sql,來導(dǎo)致原始的sql邏輯發(fā)生變化 從而跳過登錄驗證或者刪除數(shù)據(jù)庫


2.如何使用sql注入

案例一

 View Code


案例二

 View Code

 


3.如何預(yù)防sql注入漏洞

從客戶端入手,接受用戶輸入的數(shù)據(jù)時,可以加上限制,比如不能輸:-- ' ; where 等等
但是這樣只能避免,黑客從你的客戶端軟件注入 sql,無法避免間人攻擊(在你的客戶端和服務(wù)器中間加一個中轉(zhuǎn)服務(wù)器)
中間人攻擊可以繞過了客戶端的輸入限制
可以將驗證放到服務(wù)端

 View Code

 

三、事務(wù)

1.什么是事務(wù)

  是一組sql語句集合
  事務(wù)的特性:
    1.原子性:
      事務(wù)是一個整體,要么都執(zhí)行完畢,要么一個都沒執(zhí)行
    2.隔離性:
      多個事務(wù)之間一定是并發(fā)的,那么并發(fā)一定會出現(xiàn)問題
      1.臟讀 讀取到另一個事務(wù)未提交的數(shù)據(jù)
      2.不可重復(fù)讀 兩次對同一記錄的查詢結(jié)果不一致
        一個事務(wù)在查詢 另一個事務(wù)在更新
      3.幻讀 對同一表中的查詢結(jié)果數(shù)量不一致
        一個事務(wù)在查詢 另一個事務(wù)在添加或刪除
    3.一致性:
      在這個事物執(zhí)行完成后,事務(wù)中所進行的修改也都完成了,這樣一來就保證了數(shù)據(jù)的完整性
    4.持久性
      當事務(wù)執(zhí)行完畢后,事務(wù)對數(shù)據(jù)的修改都是持久性的、不可恢復(fù)的

2.如何使用

復(fù)制代碼
#語法
#1.開啟一個事務(wù)
start transaction

#2.sql語句
........
#3.事務(wù)執(zhí)行完畢后 使用commit來提交 一旦提交就不可恢復(fù)了
commit

#4.在事務(wù)還未提交時我們可以使用rollback來回滾 默認回滾到事務(wù)開始前的狀態(tài)
rollback
復(fù)制代碼

 

四、存儲過程

1.什么是存儲過程

你可以理解為mysql的編程語言

他的作用, 可以將你的程序業(yè)務(wù)邏輯放到mysql中來處理
這樣可以降低網(wǎng)絡(luò)訪問次數(shù) 從而提高你的程序效率

既然如此,你不能把所有與數(shù)據(jù)存儲相關(guān)的業(yè)務(wù)邏輯全都放mysql中?
能,但是對于公司而言,需要再請一個mysql開發(fā)者
對于你個人來說,提高溝通成本

 

2.三種開發(fā)的模型

 


方案一

應(yīng)用程序: 處理邏輯,需要手動編寫 sql語句

mysql:


優(yōu)點:執(zhí)行效率高
缺點: 開發(fā)效率低

方案二

應(yīng)用程序:

mysql :處理邏輯,mysql開發(fā)者來編寫,應(yīng)用程序開發(fā)者不需要需要手動編寫 sql語句

優(yōu)點: 應(yīng)用程序開發(fā)效率高
缺點: 執(zhí)行效率略低,溝通成本增高

 

方案三

使用 ORM(object relation map) 對象關(guān)系映射
自動幫你生成對應(yīng)的sql語句,比如你要注冊用戶,本來要寫insert語句,現(xiàn)在使用orm調(diào)用save(用戶對象)
優(yōu)點:開發(fā)效率高
缺點:執(zhí)行效率降低

 

3.語法

復(fù)制代碼
delimiter //#更換mysql的換行符
create procedure 過程的名稱 ({in,out,inout}  參數(shù)名稱  數(shù)據(jù)類型)
begin
    #具體的sql代碼
end//
delimiter ;
#參數(shù)前面需要指定參數(shù)的作用
#in 表示該參數(shù)用于傳入數(shù)據(jù)
#out 用于返回數(shù)據(jù)
#inout 即可傳入 也可返回
復(fù)制代碼

 

4.流程控制

if語句

復(fù)制代碼
if 條件  then
    語句1;
elseif 條件 then
    語句2;
else 
    語句3;
end if;
復(fù)制代碼

case語句

你給我一個值 我對它進行選擇 然后執(zhí)行匹配上的語句
復(fù)制代碼
case 變量名
when 值1 then 
    語句1;
when 值2 then 
    語句2;
when 值3 then 
    語句3;
else 
    語句4;
end case;
復(fù)制代碼

 

while語句

WHILE 條件 DO
    語句.....
end WHILE;

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多