03MySQL——DCL权限控制,四种常用函数解析

DCL-介绍

DCL英文全称是DataControl Language(数据控制语言),用来管理数据库用户、控制数据库的访问、权限。

DCL-管理用户

1查询用户:

USE mysql;

SELECT * FROM user;
2创建用户:

CREATE USER '用户名'@'主机名' IDENTIFIED BY '密码';

localhost是本地连接,%表示所有主机都可访问该数据库
3修改用户密码:

ALTER USER '用户名'@'主机名' IDENTIFIED WITH mysql_native_password by '密码';

mysql_native_password是加密算法,mysql密码必须经过加密存储
4删除用户:

DROP USER '用户名'@'主机名' ;

bash 复制代码
-- 查询用户
USE mysql;
select * from user;

-- 创建用户 itcast,只能够在当前主机localhost访问,密码123456;
CREATE USER 'itcast'@'localhost' IDENTIFIED BY '123456';

-- 创建用户 heima,可以在任意主机访问该数据库,密码123456;
CREATE USER 'heima'@'%' IDENTIFIED BY '123456';

-- 修改用户 heima的访问密码为 1234;
ALTER USER 'heima'@'%' IDENTIFIED WITH mysql_native_password by '1234';

-- 删除 itcast@localhost用户
DROP USER 'itcast'@'localhost' ;

DCL-权限控制

常用的权限列表

语法:

1查询权限:

SHOW GRANTS FOR '用户名'@'主机名' ;
2授予权限:

GRANT 权限列表 ON 数据库名.表名 TO '用户名'@'主机名';

要授予全部权限可以用ALL表示,所有的数据库或表可以用*表示
3撤销权限:

REVOKE 权限列表 ON 数据库名.表名 FROM '用户名'@'主机名';

注意,多个权限之间用逗号分隔

bash 复制代码
-- 查看权限
SHOW GRANTS FOR 'heima'@'%';

-- 授予'heima'@'%'用户对db01库中的所有表的所有权限
GRANT ALL ON db01.* TO 'heima'@'%';

-- 授予'heima'@'%'用户对所有库中的所有表的所有权限
GRANT ALL ON *.* TO 'heima'@'%';

-- 撤销'heima'@'%'用户对db01库中的所有表的select权限
REVOKE SELECT ON DB01.* FROM 'heima'@'%';

-- 撤销'heima'@'%'用户对所有库中的所有表的所有权限
REVOKE ALL ON *.* FROM'heima'@'%';

函数

函数:是指一段可以直接被另一段程序调用的程序或代码

字符串函数

MySQL中内置了很多字符串函数,常用的几个如下:

bash 复制代码
-- concat(s1,s2)  拼接字符串
SELECT concat('hello ',' world');

-- lower(s)  把所有字符变为小写
SELECT lower('HELLO');

-- upper(s)  把所有字符变为大写
SELECT upper('Hello');

-- lpad(s,n,'?')   固定输出五个字符,如果输出不足5个字符在左边补上-
SELECT lpad('1',5,'-');

-- rpad(s,n,'?')   固定输出五个字符,如果输出不足5个字符在右边补上-
SELECT rpad('1',5,'-');

-- trim(s)   去除字符串两边的空格,中间的去除
SELECT trim('  hello  wrold  ');

-- substring(s.n1.n2)  从第一个字符开始,往后取7个字符
SELECT substring('hello world',1,7);


-- 案例1.由于业务需要变更,企业员工的工号,统一为5位数,目前不足5位数的全部在前面补0。比如:1号员工的工号应该为00001。
UPDATE emp 
SET workno = lpad(workno,5,'0');

数值函数

常见数值函数如下:

bash 复制代码
-- ceil(x)  向上取整,1.3取成2
SELECT ceil(1.3);

-- floor (x) 向下取整,1.6取成1
SELECT floor(1.6);

-- rand()  在0-1之间随机生成一个小数
SELECT rand();

-- round (x,y)  使参数x保留y位小数 
SELECT round(1.24,0);

-- mod(x,y)  取余,相当于x%y
SELECT mod(4,3);

-- 案例通过数据库的函数,生成一个六位数的随机验证码。
SELECT lpad(round(rand()*100000,0),6,'0');

日期函数

常见的日期函数如下:

bash 复制代码
-- curdate()获取当前的日期  年-月-日
SELECT curdate();

-- curtime() 获取当前的时间  时-分-秒
SELECT curtime();

-- now() 获取当前的日期加时间   年-月-日  时-分-秒
SELECT now();

-- year month day 获取date的具体年月日
SELECT year(now());

SELECT month(now());

SELECT day(now());

-- date_add(date,interval n  type)  返回一个推迟后的时间
SELECT date_add(now(),interval 70 day);

SELECT date_add(now(),interval 4 month);

SELECT date_add(now(),interval 2 year);

-- datediff(t1,t2)  计算两个时间之间差多少 ,t1-ty2
SELECT datediff('2022-2-4','2032-3-14');

-- 案例:查询所有员工的入职天数,并根据入职天数倒序排序。
SELECT name,datediff(now(),entrydate)
FROM emp
ORDER BY datediff(now(),entrydate) desc;

流程函数

流程函数也是很常用的一类函数,可以在SQL语句中实现条件筛选,从提高语句的效率。

bash 复制代码
-- if(value,t,f)  如果value为真返回t,如果value为假返回f
SELECT if(true,'ok','error');
SELECT if(false,'ok','error');

-- ifnull(value1,value2)  如果value1不为空返回value1,如果value1为空返回value2
SELECT ifnull('ok','error');
SELECT ifnull('','error');
SELECT ifnull(null,'error');

-- case when then else end
-- 需求:查询emp表的员工姓名和工作地址(北京/上海---->一线城市,其他---->二线城市)
SELECT `name`,
      (case workaddress when '北京' then '一线城市' when '上海' then '一线城市' else '二线城市' end) AS '工作城市'
FROM emp;

-- 需求:统计班级各个学员的成绩,展示的规则如下:
-- >=85 ,展示优秀
-- >=60,展示良好
-- 否则,展示不及格
SELECT name,
		 (case when math >=85 then '优秀' when math >=60 then '良好' else '不及格' end) AS '数学成绩',
		 (case when english>=85 then '优秀' when english >=60 then '良好' else '不及格' end) AS '英语成绩',
		 (case when chinese >=85 then '优秀' when chinese >=60 then '良好' else '不及格' end) AS '语文成绩'
 FROM score;
		 

这是我的个人学习笔记,主要用于记录自己对知识点的理解和梳理。由于目前仍在学习探索阶段,内容中难免存在理解偏差或表述疏漏,恳请各位大佬不吝赐教,多提宝贵意见~ 若有不同看法,欢迎理性交流探讨,感谢包容与指正!

相关推荐
设计师小聂!40 分钟前
宝塔 Linux 面板保姆级教程
linux·mysql·开源·运维开发
Tong Z2 小时前
Mysql DDL中的ALGORITHM
数据库·mysql
李白的天不白3 小时前
查找容器IP
sql
minji...6 小时前
MySQL数据库 (七) MySQL表的基本查询(上),insert、replace、select、where、order by
数据库·mysql·select·replace·insert·order by·where
折戟不必沉沙8 小时前
mysql忘记密码
数据库·mysql
kuonyuma8 小时前
MyBatis入门·注解操作
java·spring boot·mysql·spring·mybatis
聪明努力的积极向上8 小时前
【claude code】MySQL MCP 配置完整指南
数据库·mysql·ai编程
DIY源码阁8 小时前
JavaSwing酒店管理系统 - MySQL版
java·mysql·eclipse
川石课堂软件测试8 小时前
UI自动化测试|元素操作&浏览器操作实践
功能测试·测试工具·mysql·ui·docker·容器·单元测试
码不停蹄的玄黓9 小时前
MySQL 慢查询日志 核心参数详解
数据库·mysql