本文目錄
一、視圖
1.1 概述
1、視圖是一張虛擬表,它表示一張表的部分數據或多張表的綜合數據,其結構和數據是建立在對錶的查詢基礎上
2、視圖中並不存放數據,而是存放在視圖所引用的原始表(基表)中
3、同一張原始表,根據不同用戶的不同需求,可以創建不同的視圖
1.2 作用
1、篩選表中的行
2、防止未經許可的用戶訪問敏感數據
3、增加數據的兼容性(數據庫的字段名發生變化,程序可以不用改字段名)
4、隱藏數據表的結構
5、降低數據庫的複雜程度
1.3 創建視圖
語法: create view as select 語句;
例如:
1.4 修改視圖
語法: alter view 視圖名 as select 語句;
例:
1.5 刪除視圖
語法: drop view [if exists] 視圖1, 視圖2,...;
例:
1.6 查看視圖信息
方法一:
show tables;
顯示所有的表和視圖
方法二:
視圖信息存儲在information_schema下的views表中。
查詢視圖的結構:
1.7 視圖算法
找出語文成績最高的男生和女生:
方法一:
方法二:
可以看到默認走了merge算法。
視圖的算法有:
1、合併算法(merge)
將視圖語句和外層語句合併後再執行
2、臨時表算法(temptable)
將視圖作爲一個臨時表來執行
3、未定義算法(undefined)
查看創建視圖的語句:
默認視圖創建時爲未定義算法。雖然寫了undefined,但是一般在視圖會使用merge。
方法二更正臨時表算法:
二、事務
2.1 概述
1、事務(TRANSACTION)是一個整體,要麼一起執行,要麼一起不執行。
2、這些操作作爲一個整體一起向系統提交,要麼都執行,要麼都不執行
3、事務是一個不可分割的工作邏輯單元
2.2 事務特性
事務必須具備一下四個屬性,簡稱ACID屬性:
1、原子性(Atomicity):事務是一個完整的操作,事務的各步操作是不可分的(原子的);要麼都執行,要麼都不執行
2、一致性(Consistency):當事務完成時,數據必須處於一致狀態
3、隔離性(Isolation):對數據進行修改的所有併發事務是彼此隔離的。
4、永久性(Durability):事務完成後,它對數據庫的修改被永久保持。
2.3 事務處理
1、開啓事務
start transaction 或者 begin [work]
2、提交事務
commit
3、回滾事務
rollback
例題:
- 先創建測試表和數據:
修改默認執行符號(之前默認是分號執行)
- 開啓事務並且更改
- 回滾
回滾到了初始狀態。
提交(commit)事務後再回滾就沒有用了。
4、設置事務的回滾點
5、自動提交事務
每一個sql語句都是一個獨立的事務。
6、小結:
1、事務是事務開啓的時候開始
2、提交事務、回滾事務後事務都結束
3、只有innodb引擎支持事務
4、一個sql語句就是一個獨立的事務,開啓事務是將多個sql語句放到一個事務中執行
三、索引
3.1 概述
優點:
加快查詢速度
缺點:
1、帶索引的表在數據庫中需要更多的存儲空間
2、操縱數據的命令需要更長的處理時間,因爲它們需要對索引進行更新
3.2 創建索引的指導原則
適合創建索引的列
1、該列用於頻繁搜索
2、該列用於對數據進行排序
3、在where子句中出現的列,在join子句中出現的列
請不要使用下面的列創建索引:
1、列中僅包含幾個不同的值
2、表中僅包含幾行,爲小型表創建索引可能不太划算,因爲mysql在索引中搜索數據所話的時間在表中
3.3 創建索引
1、主鍵索引:只要創建了主鍵就會自動的創建主鍵的索引
2、唯一索引:
只要創建了唯一鍵就會自動的創建唯一索引:
給表添加的方式,創建唯一索引:
通過修改表創建唯一索引:
3、普通索引
給表添加普通索引
修改普通索引
4、小結
1、創建主鍵就會創建主鍵索引
2、創建唯一鍵就會創建唯一索引
3、創建索引後,數據庫根據查詢語句自動選擇索引
3.4 刪除索引
語法: drop index 索引名 on 表名
四、函數
4.1 數字類
1、獲取隨機數
場景一:隨機選擇一名學生
2、四捨五入
3、截取數據
4、取整
向上取整
向下取整
4.2 字符串類
1、大小寫轉換
2、截取字符串
3、字符串相連
4、coalesce(str1, str2)
如果str1有值就顯示str1,如果沒有值就顯示str2
5、length() 字節長度,char_length() 字符長度
4.3 時間類
1、時間戳
2、格式化時間戳
3、獲取當前時間
4、獲取年月日小時分鐘秒
5、星期、月份、哪一天
6、日期相減
4.4 加密函數
1、md5()
2、sha()
五、預處理
預編譯一次,可以多次執行,用來解決一條sql語句頻繁執行的問題
預處理語句:
prepare 預處理名字 from 'sql語句'
執行預處理:
execute 預處理名字 [using 變量]
1、不帶參數的處理
2、帶一個參數的預處理
3、小結
1、MySQL中變量以@開頭,通過set給變量賦值。
2、?表示一個佔位符。
在學習的MySQL的路上,如果你覺得本文對你有所幫助的話,那就請關注點贊評論三連吧,謝謝,你的肯定是我寫博的另一個支持。