DCL
DCL 比較簡單,主要用于授予或收回訪問數據庫的權限,以及數據庫事務的提交和回滾。
授予/收回權限
以授予權限為例,我們新建一個數據庫后,想要授予特定用戶該數據庫的訪問和操作權限(一般在生產環境為了安全起見,不會通過 root 用戶操作數據庫),為此我們先要創建一個特定用戶,比如 test,DCL 這種控制級的 SQL 語句一般在命令行執行,我們進入 MySQL docker 容器,連接到數據庫,通過 CREATE USER 語句新建一個 test 用戶,同時將密碼設置為 test:
創建完成后,就可以在 mysql.user 數據表中看到這個用戶了:
Host 字段為 % 表示 test 用戶可以從任何主機連接到 MySQL 服務器。
或者通過命令行查看(這里用到了 SQL 查詢語句):
然后我們就可以運行 GRANT 語句授予 test 用戶對 test 數據庫的所有操作權限了:
授權后,需要運行 flush privileges; 刷新權限,這樣就可以在 test 數據庫的權限列表中看到這個用戶了:
如果我們退出當前登錄狀態,以 test 用戶登錄,就只能看到 test 數據庫,因為它對其他數據庫沒有操作權限:
要撤回權限,需要以 root 身份進行,在權限列表刪除這個用戶,或者在命令行通過 REVOKE 語句完成:
revoke all privideges on test.* from 'test'@'%'; flush privileges;
這里操作的都是所有權限,也可以指定特定的權限:
// 授予權限 grant select on test.* to 'user1'@'localhost'; /*給予查詢權限*/ grant insert on test.* to 'user1'@'localhost'; /*添加插入權限*/ grant delete on test.* to 'user1'@'localhost'; /*添加刪除權限*/ grant update on test.* to 'user1'@'localhost'; /*添加權限*/ // 收回權限 revoke select on test.* from 'jack'@'localhost'; revoke insert on test.* from 'jack'@'localhost'; revoke delete on test.* from 'jack'@'localhost'; revoke update on test.* from 'jack'@'localhost';
事務提交/回滾
數據庫事務(database Transaction)是指作為單個邏輯工作單元執行的一系列操作(對數據庫的相關增刪改查的操作,包含一條或多條 SQL 語句),要么完全地執行,要么完全地不執行。
對于單條 SQL 語句,數據庫系統自動將其作為一個事務執行,這種事務被稱為隱式事務。
要手動把多條 SQL 語句作為一個事務執行,可以使用 BEGIN 開啟一個事務,使用 COMMIT 提交一個事務,這種事務被稱為顯式事務,如果事務執行過程中出現錯誤或異常,可以通過 ROLLBACK 語句回滾事務。
我們在命令行中簡單演示下數據庫事務的操作:
我們通過 BEGIN 語句開啟事務,但是在執行多條語句后,沒有通過 COMMIT 提交事務,測試執行這幾條 SQL 語句,進入「瀏覽」面板查看,發現并沒有插入新的記錄:
如果在上述 SQL 序列后加上 ROLLBACK 回滾事務,效果也是一樣的:
BEGIN; INSERT intO post (`title`, `content, `created_at`) VALUES ('這是一篇測試文章2', '測試內容哈哈哈', '2020-05-26 13:00:00'); INSERT INTO post (`title`, `content, `created_at`) VALUES ('這是一篇測試文章3', '測試內容哈哈哈', '2020-05-26 13:30:00'); ROLLBACK;
而如果在最后加上 COMMIT 語句,則可以順利提交修改:
關于常見的 SQL 語句和 phpMyAdmin 中的可視化演示,就簡單介紹到這里,更多細節,需要大家結合網上的 SQL 教程自己去探索,這不是本系列教程的重點,這里就不詳細展開了。
聚合函數
除了常見的 SQL 查詢和操作語句之外,SQL 還內置了一些聚合函數,方便在數據查詢時對結果進行簡單便捷的統計。這里我們介紹幾個常見的函數:count、sum、avg、max 和 min。
COUNT
count 函數可用于統計查詢結果總共有多少條,通常在進行分頁查詢時需要用到這個函數。為了方便直接看到結果,我們在命令行中進行演示:
在查詢字段時為了提高可讀性,可以通過 as 指定字段別名,這里 post 表總共有三條記錄,所以查詢結果是 3。
SUM
sum 可用于統計查詢結果中某個字段的求和,因此只能用于數字類型字段,這里我們為 post 表新增一個字段 views,用于存儲對應文章記錄的瀏覽次數。在 post 表結構中,選擇在 content 字段后新增一個字段并點擊「執行」:
將字段名設置為 views,并將其類型設置為 UNSIGNED INT,表示非負整數,同時設置默認值為 0,對應的 SQL 語句可以通過預覽功能查看:
點擊「保存」創建這個字段,就可以在表結構中看到它了:
由于 views 有默認值,所以目前所有記錄的 views 值都是 0:
可以通過「編輯」功能將其設置為對應的模擬值:
接下來,我們就可以通過 sum 函數對結果進行求和統計了:
AVG
avg 可用于統計查詢結果中某個字段的平均值,和 sum 一樣,也是作用于數字類型字段,比如我們可以通過它來統計所有文章的平均瀏覽數:
如果是一個不能被整除的數字,平均數會精確到小數點后四位。
MAX
max 可用于獲取查詢結果中某個數字類型字段的最大值,比如要獲取瀏覽數最高的文章信息可以這么做:
MySQL 命令行默認中文亂碼,我們可以通過 set names utf8mb4; 將編碼類型設置為 utf8mb4,這樣就可以正常顯示中文和 Emoji 表情符號了。
另外,這里還用到了子查詢的概念,就是將一個查詢的結果作為另一個查詢的條件,這里我們將最大瀏覽數作為子查詢的結果傳遞給父查詢作為查詢條件,獲取對應的文章信息。
MIN
與 max 相對,min 函數用于獲取查詢結果中某個數字類型字段的最小值,比如要獲取瀏覽數最低的文章信息可以這么做:
小結
好了,關于 MySQL 數據庫的基本查詢、操作和統計,我們就簡單介紹到這里,相信你已經對 MySQL 及其操作有了基本的認知。下篇教程,將給大家介紹如何在 PHP 中連接 MySQL 數據庫并執行增刪改查操作,關于一些更復雜的操作,比如分頁、分組、連接查詢、關聯關系、索引設置和應用,我們將在后續教程中結合具體實例進行演示。
本文來自于https://xueyuanjun.com/post/21656
想了解更多相關文章,敬請關注php mysql欄目!