MySQL视图、事务与存储过程
一、可視化工具的使用方法
簡述:首先我們使用數據庫可視化工具是為了讓我們在建立數據庫的時候能夠減少代碼的書寫從而提升我們編寫程序的效率,而我使用的是Navicat工具是因為使用它基本為無腦操作我就不過多的介紹。
二、注入mysql攻擊
1、什么是注入mysql攻擊?
簡述:注入mysql攻擊指的是用戶可以某種方式無需用戶名或密碼就可以登入你的數據庫。
2、注入mysql攻擊的兩種方式:
1:用戶在登錄時在其輸入的用戶名后寫入了如__等字符,在pymysql中__代表的是注釋所以跟在其后的輸入密碼的功能就無效了,這樣可以通過在輸入界面寫上限制條件就可以避免
2、中間人攻擊,是由黑客通過編寫一個假的用戶端來給服務端發消息從而上面那種解決方式就不行了,所以必須通過給服務端也加上限制條件就能夠避免,當然pymysql也幫我們想到了這一點我們可以將要執行的數據放在其execute括號里的args里就可以就解決以上問題。
三、視圖
1、什么是視圖?
簡述:視圖指的就是將一個表的得到的結果當作條件給另一個表使用。
2、使用視圖有什么好處呢?
簡述:使用視圖能夠限制用戶的查且這種方式比直接限制其權限好在視圖查詢符合某一條件的一行數據而限制權限并不能起到這種作用。
2.1怎么使用視圖其步驟如下:
create view 視圖名 as select* from表名(所需數據的表);
特點:1、視圖是永久存儲而且存儲的并不是數據而是一條as sql 語句.
2、視圖被修改或刪除時其所引用的原表也會跟著變
3、視圖的每一次執行其實都是在調 as 后的sql語句
四、事務
1、什么是事務?
簡述:在生活中事務可以理解為做某一事可以分為一個一個步驟從而完成事情的方法,而在mysql中其就是由一組SQL語句組成。
2、事務的四大特性
原子性:
事務是一個整體不可分割
隔離性:
事務之間隔離是為了數據的完整性,由并發執行引發的問題有:
1.臟讀??? 一個事務 讀到了 另一個事務未提交的數據? 查詢 之前要保證 所 有的更新都已經完成
??? 2.幻讀??? 一個查詢事務沒有結束時 數據被另一個事務 執行insert delete
????3.不可重復讀?? 一個事物在查詢 另一個事務在 update
四種隔離級別:
讀未提交:
讀已提交:
可重復讀:
串行化:
一致性:
當事務執行后所有的數據都是完整的
持久性:
??? 一旦事務提交就會被永久存儲
注意:事務就是一組SQL語句組成的,它們的原子性要變就一起變,不變就都不變。
mysql是默認執行事務的而pymysql需要我們手動寫commit提交事務,在提交前我們可以通過start? transaction啟動事務,當執行事務出錯是可以通過 rollback回滾事務(從而使時務能夠恢復原來的狀態).
五、存儲過程
1、什么是存儲過程?
簡述:存儲過程可以理解為mysql的編程語言.
2、存儲過程的三種類型
對于同樣一個業務? 你可以放到python也可以放到mysql 有什么區別?
?????? 1. 應用程序? 處理邏輯 ??????????
? 需要手動編寫 sql語句
??????????? 優點:執行效率高 ???????????
??????????? 缺點: 開發效率低
mysql
?????? 2. ????????? 應用程序
????????? mysql 處理邏輯
??????????? 特點: 應用程序開發者不需要需要手動編寫 sql語句
????????????????? mysql開發者來編寫
??????????? 優點: 應用程序開發效率高
??????????? 缺點: 執行效率略低,溝通成本增高
??????? 3.使用 ORM(object relation map) 對象關系映射
??????????? 自動幫你生成對應的sql語句 比如你要注冊用戶 本來要寫insert 語句? 現在使用orm調用save(用戶對象)
??????????? 優點:開發效率高 ???????????
?缺點:執行效率降低
??????? 存儲過程相當于python中的一個函數
??????? 簡單地說 學習存儲過程就是學習 如何使用mysql編寫一個函數
??????? 語法:
??????????? create procedure 過程的名稱 ({in,out,inout}? 數據類型 參數名稱)
??????????? begin
??????????????? 具體的sql代碼
??????????? end ???????????
參數前面需要指定參數的作用
??????????? in 表示該參數用于傳入數據 ???????????
out 用于返回數據 ???????????
??????????? inout?即可傳入 也可返回
??????????? 參數類型是 mysql中的數據類型
???????? 案例:創建一個存儲過程 作用是將兩個整數相加
??????????? create procedure add_p (in a int,in b int)
??????????? begin
??????????????? select a + b;
??????????? end
??????????? // ?? 調用 call add_p(1,2)
???????? 案例:創建一個存儲過程 作用是將兩個整數相加 將結果保存在變量中
???? 定義一個變量 ???? set @su = 100;
??????????? create procedure add_p2 (in a int,in b int,out su int)
??????????? begin
??????????????? set su = a + b;
??????????? end
??????????? // ?
?定義變量 set @su = 100;
?調用過程 call? add_p2(10,20,@su);
????????? 注意? 在存儲過程中 需要使用分號來結束一行 但是分號有特殊含義,得將原始的結束符 修改為其他符號,delimiter // 結束符更換為//????????????
????????? mysql中的if語句結構
????????? if 條件 then
??????????? 代碼
????????? elseif 條件 then
??????????? 代碼
????????? else then
??????????? 代碼
????????? end if;
? ? end
???????????\\
? 案例: ???????? 使用存儲過程 完成? 輸入 一個 數字 1或2?? 顯示 壹 或 貳
??????????? create procedure show_p (in a int)
??????????? begin
??????????? if a = 1 then
??????????????? select "壹";
??????????? elseif a = 2 then
??????????????? select "貳";
??????????? else
??????????????? select "other";
??????????? end if;
??????????? end //??
? ?調用存儲過程 使用 call 過程名稱 ?call add_p(10,20);
??????? 其他的流程控制
??????? switch
??????? case
??????? while
??????? repeat ==? do while
?????? 總結: 實際上一個mysql中的類似函數的東西? 我們可以用它實現一些邏輯處理
???????????? 特點:里面可以包含流程控制語句 和 普通的sql語句
???????????? 使用存儲過程的優勢:1、提高應用程序開發效率2、降低網絡訪問次數
?
轉載于:https://www.cnblogs.com/ageliu/p/9670979.html
總結
以上是生活随笔為你收集整理的MySQL视图、事务与存储过程的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 一个完整的canvas画图
- 下一篇: 四步法分析定位生产环境下MySQL上千条