mysql DCL权限控制和简单函数案例说明

 更新时间:2026年01月23日 09:26:41   作者:wysysy  
DCL语句主要是DBA用来管理系统中的对象权限时所使用,一般的开发人员很少使用,这篇文章主要介绍了mysql DCL权限控制和简单函数的相关资料,文中通过代码介绍的非常详细,需要的朋友可以参考下

引言

SQL(Structured Query Language)是数据库管理的核心语言,涵盖数据操作(DML)、数据定义(DDL)、数据控制(DCL)等功能。本笔记详细解析用户提供的代码中涉及的DCL权限控制、字符串函数、数值函数、日期函数和流程控制函数,并结合案例说明应用场景。建议使用数据库可视化工具(如MySQL Workbench)执行查询并查看结果图表。

1. DCL权限控制

DCL(Data Control Language)用于管理数据库访问权限,包括用户授权和撤销权限。关键命令:

  • GRANT:授予用户权限,语法为 GRANT 权限 ON 数据库.表 TO '用户'@'主机'
    GRANT ALL ON itcast.* TO 'itheima'@'%'; -- 授予用户itheima对itcast数据库的所有权限
    
  • REVOKE:撤销用户权限,语法为 REVOKE 权限 ON 数据库.表 FROM '用户'@'主机'
    REVOKE ALL ON itcast.* FROM 'itheima'@'%'; -- 撤销用户itheima对itcast数据库的所有权限
    
  • SHOW GRANTS:查询用户权限。
    SHOW GRANTS FOR 'itheima'@'%'; -- 显示用户itheima的权限
    

应用场景:控制用户对数据库的读写权限,确保数据安全。例如,管理员授予开发人员只读权限,防止误操作。

2. 字符串函数

字符串函数用于文本处理,包括拼接、大小写转换、填充和截取等。常见函数:

  • 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'。

案例:统一工号格式,不足5位左侧补零。

UPDATE emp SET workno = LPAD(workno, 5, '0'); -- 将workno填充至5位,左侧补0

3. 数值函数

数值函数处理数学运算,包括取整、模运算和随机数生成:

  • 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)$ 的随机数。
    SELECT RAND(); -- 返回随机数如 0.752
    
  • ROUND(num, decimals):四舍五入
    SELECT ROUND(2.345, 2); -- 返回 2.35
    

案例:生成6位随机验证码。

SELECT LPAD(ROUND(RAND()*1000000, 0), 6, '0'); -- 步骤:1. RAND()*1000000 生成随机数;2. ROUND 取整;3. LPAD 左侧补0至6位

 通过数据库函数,生成6位随机验证码,rand求随机数*1000000得随机数,round舍去后面小数,lpad在左侧补0保证6位数

4. 日期函数

日期函数处理时间数据,包括获取当前日期、提取成分和计算差值:

  • 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
    

案例:计算员工入职天数并排序。

SELECT name, DATEDIFF(CURDATE(), entrydate) AS entrydays FROM emp ORDER BY entrydays ASC;

5. 流程控制函数

流程控制函数实现条件逻辑,包括简单判断和分支选择:

  • 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 '优秀' WHEN math >= 60 THEN '及格' ELSE '不及格' END) '数学',
  (CASE WHEN english >= 85 THEN '优秀' WHEN english >= 60 THEN '及格' ELSE '不及格' END) '英语',
  (CASE WHEN chinese >= 85 THEN '优秀' WHEN chinese >= 60 THEN '及格' ELSE '不及格' END) '语文'
FROM score;

数学表示:CASE 语句可视为分段函数,例如成绩分级:

案例:统计班级各个学员的成绩,展示的规则如下:

-- >=85 ,展示优秀
-- >=60 ,展示及格
-- 否则,展示不及格

6. 综合案例:学员成绩分析

用户创建了score表并插入数据:

CREATE TABLE score(
    id INT COMMENT 'ID',
    name VARCHAR(20) COMMENT '姓名',
    math INT COMMENT '数学',
    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);

使用流程控制函数分级成绩:

SELECT id, name,
  (CASE WHEN math >= 85 THEN '优秀' WHEN math >= 60 THEN '及格' ELSE '不及格' END) '数学',
  -- 类似逻辑应用于英语和语文
FROM score;

结果示例(建议用表格展示):

IDName数学英语语文
1Tom及格优秀优秀
2Rose不及格及格优秀
3Jack及格优秀及格

配图建议:在数据库工具中执行查询,导出为CSV或图表,展示成绩分布(如条形图显示各等级人数)。

总结

SQL函数极大简化了数据处理:

  • DCL 确保数据安全。
  • 字符串函数 优化文本操作。
  • 数值函数 支持数学计算。
  • 日期函数 管理时间数据。
  • 流程控制函数 实现复杂逻辑。 通过案例可见,这些函数在数据清洗(如工号格式化)、分析(如入职天数计算)和报表(如成绩分级)中广泛应用。建议练习更多场景以巩固技能,例如结合多函数处理实时数据。

到此这篇关于mysql DCL权限控制和简单函数的文章就介绍到这了,更多相关mysql DCL权限控制和函数内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 一步步教你配置MySQL远程访问

    一步步教你配置MySQL远程访问

    这篇文章主要给大家介绍了配置MySQL远程访问的相关资料,文中介绍的非常详细,相信对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面来一起看看吧。
    2017-04-04
  • 解决SQL文件导入MySQL数据库1118错误的问题

    解决SQL文件导入MySQL数据库1118错误的问题

    在使用Navicat导入SQL文件时,有时会遇到报错问题,这通常与MySQL版本差异或严格模式设置有关,若报错提示rowsize长度过长,可能是因为MySQL的严格模式开启导致,解决方法是检查严格模式是否开启,若开启则需关闭
    2024-10-10
  • MySQL慢查询如何定位详解

    MySQL慢查询如何定位详解

    这篇文章主要给大家介绍了关于MySQL慢查询如何定位的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-11-11
  • mysql去重的两种方法详解及实例代码

    mysql去重的两种方法详解及实例代码

    这篇文章主要介绍了mysql去重的两种方法详解及实例代码的相关资料,这里对去重的两种方法进行了一一实例详解,需要的朋友可以参考下
    2017-01-01
  • RHEL6.5编译安装MySQL5.6.26教程

    RHEL6.5编译安装MySQL5.6.26教程

    这篇文章主要介绍了RHEL6.5编译安装MySQL5.6.26教程的相关资料,需要的朋友可以参考下
    2015-10-10
  • mysql密码忘了的问题及解决方案

    mysql密码忘了的问题及解决方案

    这篇文章主要介绍了mysql密码忘了的问题及解决方案,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2025-04-04
  • MySQL使用MyFlash快速恢复误删除和修改的数据

    MySQL使用MyFlash快速恢复误删除和修改的数据

    MyFlash 是由美团点评公司技术工程部开发并维护的一个开源工具,主要用于MySQL数据库的DML操作的回滚,MyFlash的优势在于它提供了更多的过滤选项,使得回滚操作变得更加容易,本文将实验通过 MyFlash 工具快速恢复误删除 或 误修改的数据,需要的朋友可以参考下
    2024-06-06
  • mysql 数据库备份和还原方法集锦 推荐

    mysql 数据库备份和还原方法集锦 推荐

    本文讨论 MySQL 的备份和恢复机制,以及如何维护数据表,包括最主要的两种表类型:MyISAM 和 Innodb,文中设计的 MySQL 版本为 5.0.22。
    2010-03-03
  • MySQL中锁的相关问题

    MySQL中锁的相关问题

    这篇文章主要介绍了MySQL中锁的相关问题,本文给大家介绍了从对数据操作的粒度分 ,从对数据操作的类型分,给大家介绍的非常详细,需要的朋友可以参考下
    2021-12-12
  • MYSQL Left Join优化(10秒优化到20毫秒内)

    MYSQL Left Join优化(10秒优化到20毫秒内)

    在实际开发中,相信大多数人都会用到join进行连表查询,但是有些人发现,用join好像效率很低,而且驱动表不同,执行时间也不同。那么join到底是如何执行的呢,本文就详细的介绍一下
    2021-12-12

最新评论