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;
		 

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

相关推荐
2301_773638631 小时前
Kubernetes部署MySQL主从复制
mysql·容器·kubernetes
小猿姐3 小时前
KubeBlocks For MySQL 云原生设计分享
mysql·云原生·架构
携欢3 小时前
PortSwigger靶场之SQL injection with filter bypass via XML encoding通关秘籍
xml·数据库·sql
Java水解3 小时前
MySQL 中的 UPDATE 语句
后端·mysql
手握风云-5 小时前
MySQL数据库精研之旅第十一期:打造高效联合查询的实战宝典(二)
数据库·mysql
Jasonakeke6 小时前
【重学MySQL】八十九、窗口函数的分类和使用
数据库·mysql
倔强的石头1066 小时前
数据对话的“通用语法”:SQL与KingbaseES的智能处理艺术
数据库·sql
御坂100278 小时前
SQL查询-设置局部变量(PostgreSQL、MySQL)
sql·mysql·postgresql
Jasonakeke9 小时前
【重学 MySQL】九十二、 MySQL8 密码强度评估与配置指南
android·数据库·mysql