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