mysql?DCL權限控制和簡單函數(shù)案例說明
引言
SQL(Structured Query Language)是數(shù)據(jù)庫管理的核心語言,涵蓋數(shù)據(jù)操作(DML)、數(shù)據(jù)定義(DDL)、數(shù)據(jù)控制(DCL)等功能。本筆記詳細解析用戶提供的代碼中涉及的DCL權限控制、字符串函數(shù)、數(shù)值函數(shù)、日期函數(shù)和流程控制函數(shù),并結合案例說明應用場景。建議使用數(shù)據(jù)庫可視化工具(如MySQL Workbench)執(zhí)行查詢并查看結果圖表。
1. DCL權限控制
DCL(Data Control Language)用于管理數(shù)據(jù)庫訪問權限,包括用戶授權和撤銷權限。關鍵命令:
- GRANT:授予用戶權限,語法為
GRANT 權限 ON 數(shù)據(jù)庫.表 TO '用戶'@'主機'。GRANT ALL ON itcast.* TO 'itheima'@'%'; -- 授予用戶itheima對itcast數(shù)據(jù)庫的所有權限
- REVOKE:撤銷用戶權限,語法為
REVOKE 權限 ON 數(shù)據(jù)庫.表 FROM '用戶'@'主機'。REVOKE ALL ON itcast.* FROM 'itheima'@'%'; -- 撤銷用戶itheima對itcast數(shù)據(jù)庫的所有權限
- SHOW GRANTS:查詢用戶權限。
SHOW GRANTS FOR 'itheima'@'%'; -- 顯示用戶itheima的權限
應用場景:控制用戶對數(shù)據(jù)庫的讀寫權限,確保數(shù)據(jù)安全。例如,管理員授予開發(fā)人員只讀權限,防止誤操作。
2. 字符串函數(shù)
字符串函數(shù)用于文本處理,包括拼接、大小寫轉換、填充和截取等。常見函數(shù):
- CONCAT(str1, str2):拼接字符串,如
CONCAT('hello', 'mysql')返回 'hellomysql'。 - LOWER(str):轉為小寫,如
LOWER('HELLO')返回 'hello'。 - UPPER(str):轉為大寫,如
UPPER('hello')返回 'HELLO'。 - LPAD(str, len, pad_str):左側填充,如
LPAD('01', 5, '-')返回 '---01'(長度5,左側填充'-')。 - RPAD(str, len, pad_str):右側填充,如
RPAD('01', 5, '-')返回 '01---'。 - TRIM(str):去除首尾空格,如
TRIM(' hello mysql ')返回 'hello mysql'。 - SUBSTRING(str, start, len):截取子串,如
SUBSTRING('hello mysql', 1, 5)返回 'hello'。
案例:統(tǒng)一工號格式,不足5位左側補零。
UPDATE emp SET workno = LPAD(workno, 5, '0'); -- 將workno填充至5位,左側補0
3. 數(shù)值函數(shù)
數(shù)值函數(shù)處理數(shù)學運算,包括取整、模運算和隨機數(shù)生成:
- CEIL(num):向上取整。
SELECT CEIL(1.1); -- 返回 2
- FLOOR(num):向下取整。
SELECT FLOOR(1.1); -- 返回 1
- MOD(a, b):模運算。
SELECT MOD(7, 4); -- 返回 3 (7 ÷ 4 余 3)
- RAND():生成 $[0,1)$ 的隨機數(shù)。
SELECT RAND(); -- 返回隨機數(shù)如 0.752
- ROUND(num, decimals):四舍五入
SELECT ROUND(2.345, 2); -- 返回 2.35
案例:生成6位隨機驗證碼。
SELECT LPAD(ROUND(RAND()*1000000, 0), 6, '0'); -- 步驟:1. RAND()*1000000 生成隨機數(shù);2. ROUND 取整;3. LPAD 左側補0至6位
通過數(shù)據(jù)庫函數(shù),生成6位隨機驗證碼,rand求隨機數(shù)*1000000得隨機數(shù),round舍去后面小數(shù),lpad在左側補0保證6位數(shù)
4. 日期函數(shù)
日期函數(shù)處理時間數(shù)據(jù),包括獲取當前日期、提取成分和計算差值:
- CURDATE():返回當前日期,如 '2023-10-05'。
- CURTIME():返回當前時間,如 '14:30:00'。
- NOW():返回當前日期和時間,如 '2023-10-05 14:30:00'。
- YEAR(date):提取年份
SELECT YEAR(NOW()); -- 返回當前年份
- MONTH(date):提取月份
- DAY(date):提取日期
- DATE_ADD(date, INTERVAL expr type):添加時間間隔,如
DATE_ADD(NOW(), INTERVAL 70 YEAR)返回當前日期加70年。 - DATEDIFF(date1, date2):計算日期差
SELECT DATEDIFF('2021-12-01', '2021-11-01'); -- 返回 30
案例:計算員工入職天數(shù)并排序。
SELECT name, DATEDIFF(CURDATE(), entrydate) AS entrydays FROM emp ORDER BY entrydays ASC;
5. 流程控制函數(shù)
流程控制函數(shù)實現(xiàn)條件邏輯,包括簡單判斷和分支選擇:
- IF(condition, true_val, false_val):條件判斷,
如果為true返回OK,為false返回error
SELECT IF(TRUE, 'OK', 'Error'); -- 返回 'OK'
- IFNULL(val, default):空值處理
ifnull,如果為空(NULL)則返回默認值,否則返回第一個字符
SELECT IFNULL(NULL, 'default'); -- 返回 'default'
- CASE WHEN THEN ELSE END:多分支條件,語法:
CASE WHEN condition1 THEN result1 WHEN condition2 THEN result2 ELSE default END
case when then else end,當符合when的值時,返回then的值,否則返回else的值
-- 需求:查詢emp表的員工姓名和工作地址(北京/上海----->一線城市,其他----->二線城市)
案例1:分類工作地址。
SELECT name,
(CASE workaddress
WHEN '北京' THEN '一線城市'
WHEN '上海' THEN '一線城市'
ELSE '二線城市'
END) AS '工作地址'
FROM emp;
案例2:學員成績分級(基于score表)。
SELECT id, name, (CASE WHEN math >= 85 THEN '優(yōu)秀' WHEN math >= 60 THEN '及格' ELSE '不及格' END) '數(shù)學', (CASE WHEN english >= 85 THEN '優(yōu)秀' WHEN english >= 60 THEN '及格' ELSE '不及格' END) '英語', (CASE WHEN chinese >= 85 THEN '優(yōu)秀' WHEN chinese >= 60 THEN '及格' ELSE '不及格' END) '語文' FROM score;
數(shù)學表示:CASE 語句可視為分段函數(shù),例如成績分級:
案例:統(tǒng)計班級各個學員的成績,展示的規(guī)則如下:
-- >=85 ,展示優(yōu)秀
-- >=60 ,展示及格
-- 否則,展示不及格
6. 綜合案例:學員成績分析
用戶創(chuàng)建了score表并插入數(shù)據(jù):
CREATE TABLE score(
id INT COMMENT 'ID',
name VARCHAR(20) COMMENT '姓名',
math INT COMMENT '數(shù)學',
english INT COMMENT '英語',
chinese INT COMMENT '語文'
) COMMENT '學員成績表';
INSERT INTO score VALUES (1, 'Tom', 67, 88, 95), (2, 'Rose', 23, 66, 90), (3, 'Jack', 56, 98, 76);
使用流程控制函數(shù)分級成績:
SELECT id, name, (CASE WHEN math >= 85 THEN '優(yōu)秀' WHEN math >= 60 THEN '及格' ELSE '不及格' END) '數(shù)學', -- 類似邏輯應用于英語和語文 FROM score;
結果示例(建議用表格展示):
| ID | Name | 數(shù)學 | 英語 | 語文 |
|---|---|---|---|---|
| 1 | Tom | 及格 | 優(yōu)秀 | 優(yōu)秀 |
| 2 | Rose | 不及格 | 及格 | 優(yōu)秀 |
| 3 | Jack | 及格 | 優(yōu)秀 | 及格 |
配圖建議:在數(shù)據(jù)庫工具中執(zhí)行查詢,導出為CSV或圖表,展示成績分布(如條形圖顯示各等級人數(shù))。
總結
SQL函數(shù)極大簡化了數(shù)據(jù)處理:
- DCL 確保數(shù)據(jù)安全。
- 字符串函數(shù) 優(yōu)化文本操作。
- 數(shù)值函數(shù) 支持數(shù)學計算。
- 日期函數(shù) 管理時間數(shù)據(jù)。
- 流程控制函數(shù) 實現(xiàn)復雜邏輯。 通過案例可見,這些函數(shù)在數(shù)據(jù)清洗(如工號格式化)、分析(如入職天數(shù)計算)和報表(如成績分級)中廣泛應用。建議練習更多場景以鞏固技能,例如結合多函數(shù)處理實時數(shù)據(jù)。
到此這篇關于mysql DCL權限控制和簡單函數(shù)的文章就介紹到這了,更多相關mysql DCL權限控制和函數(shù)內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
解決SQL文件導入MySQL數(shù)據(jù)庫1118錯誤的問題
在使用Navicat導入SQL文件時,有時會遇到報錯問題,這通常與MySQL版本差異或嚴格模式設置有關,若報錯提示rowsize長度過長,可能是因為MySQL的嚴格模式開啟導致,解決方法是檢查嚴格模式是否開啟,若開啟則需關閉2024-10-10
MySQL使用MyFlash快速恢復誤刪除和修改的數(shù)據(jù)
MyFlash 是由美團點評公司技術工程部開發(fā)并維護的一個開源工具,主要用于MySQL數(shù)據(jù)庫的DML操作的回滾,MyFlash的優(yōu)勢在于它提供了更多的過濾選項,使得回滾操作變得更加容易,本文將實驗通過 MyFlash 工具快速恢復誤刪除 或 誤修改的數(shù)據(jù),需要的朋友可以參考下2024-06-06
mysql 數(shù)據(jù)庫備份和還原方法集錦 推薦
本文討論 MySQL 的備份和恢復機制,以及如何維護數(shù)據(jù)表,包括最主要的兩種表類型:MyISAM 和 Innodb,文中設計的 MySQL 版本為 5.0.22。2010-03-03
MYSQL Left Join優(yōu)化(10秒優(yōu)化到20毫秒內)
在實際開發(fā)中,相信大多數(shù)人都會用到join進行連表查詢,但是有些人發(fā)現(xiàn),用join好像效率很低,而且驅動表不同,執(zhí)行時間也不同。那么join到底是如何執(zhí)行的呢,本文就詳細的介紹一下2021-12-12

