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数据表添加字段的三种方式,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-03-03
  • MySQL主从复制之GTID模式详细介绍 

    MySQL主从复制之GTID模式详细介绍 

    这篇文章主要介绍了MySQL主从复制之GTID模式,GTID的复制方式,它由UUID和事务ID两个部分组成,具有GTID事务是全局唯一性的,并且一个事务对应一个GTID值、一个GTID值在同一个MySQL实例上只会执行一次等特点,想了解更多的小伙伴可以参考下面详细内容,希望对你有所帮助
    2022-02-02
  • 使用Visual Studio Code连接MySql数据库并进行查询

    使用Visual Studio Code连接MySql数据库并进行查询

    这篇文章主要介绍了使用Visual Studio Code连接MySql数据库并进行查询,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-02-02
  • mysql 新增、删除用户和权限分配

    mysql 新增、删除用户和权限分配

    这篇文章主要为大家演示下如果通过命令行实现mysql的新建用户、删除用户和权限分配,需要的朋友可以参考下
    2013-10-10
  • navicat不能创建函数解决方法分享

    navicat不能创建函数解决方法分享

    这篇文章主要介绍了navicat不能创建函数解决方法分享,小编觉得还是挺不错的,这里分享给大家,供需要的朋友参考。
    2017-10-10
  • 数据库中如何通过创建新表来备份操作示例代码

    数据库中如何通过创建新表来备份操作示例代码

    数据库备份是指在特定时间点保存数据库中数据的过程,备份数据通常存储在不同的物理介质上,比如硬盘、磁带或云端存储设备,以防止数据丢失或损坏,这篇文章主要介绍了数据库中如何通过创建新表来备份操作的相关资料,需要的朋友可以参考下
    2025-07-07
  • MySQL子查询的几种常见形式介绍

    MySQL子查询的几种常见形式介绍

    mysql从4.1版开始支持子查询功能,在此版本前,可以用join写连表查询来进行替代,但不推荐这么写,相当的麻烦
    2014-04-04
  • MySQL 随机函数获取数据速度和效率分析

    MySQL 随机函数获取数据速度和效率分析

    最近做项目,需要做一个从mysql数据库中随机取几条数据出来。总所周知,order by rand 会死人的。。因为本人对大数据量方面的只是了解的很少,无解,去找百度老师。。搜索结果千篇一律。特发到这里来,供大家学习,需要的朋友可以参考下
    2016-11-11
  • Idea 如何导入Mysql8.0驱动jar包

    Idea 如何导入Mysql8.0驱动jar包

    IDEA中的库(Libraries)就是用来存放外部jar包,我们的项目或模块需要某些jar包时,可以从这里把包导入到模块依赖(Dependencies)中,本文给大家介绍Idea 如何导入Mysql8.0驱动jar包,感兴趣的朋友一起看看吧
    2023-12-12
  • 基于 Mysql 实现一个简易版搜索引擎

    基于 Mysql 实现一个简易版搜索引擎

    本文基于 Mysql 8.0 版本,数据库引擎采用的是 InnoDB,关于 Mysql 实现一个简易版搜索引擎,感兴趣的朋友可以参考下文
    2021-08-08

最新评论