活动地址:CSDN21天学习挑战赛
目录
🏆Data Control Language(数据控制语言)
🏆Data Control Language(数据控制语言)
💎管理用户
查询用户
select * from mysql.user;
其中 Host代表当前用户访问的主机, 如果为localhost, 仅代表只能够在当前本机访问,是不可以 远程访问的。 User代表的是访问该数据库的用户名。在MySQL中需要通过Host和User来唯一标识一 个用户。
创建用户
CREATE USER '用户名'@'主机名' IDENTIFIED BY '密码';
修改用户密码
ALTER USER ' 用户名 ' @ ' 主机名 ' IDENTIFIED WITH mysql_native_password BY ' 新密码 ' ;
删除用户
DROP USER '用户名'@'主机名' ;
注意事项:• 在 MySQL 中需要通过用户名 @ 主机名的方式,来唯一标识一个用户。• 主机名可以使用 % 通配。• 这类 SQL 开发人员操作的比较少,主要是 DBA ( Database Administrator 数据库管理员)使用。
💎权限控制
MySQL
中定义了很多种权限,但是常用的就以下几种:
查询权限
SHOW GRANTS FOR ' 用户名 ' @ ' 主机名 ' ;
授予权限
GRANT 权限列表 ON 数据库名 . 表名 TO ' 用户名 ' @ ' 主机名 ' ;
撤销权限
REVOKE 权限列表 ON 数据库名 . 表名 FROM ' 用户名 ' @ ' 主机名 ' ;
注意事项:• 多个权限之间,使用逗号分隔• 授权时, 数据库名和表名可以使用 * 进行通配,代表所有。
🏆函数
💎字符串函数
MySQL
中内置了很多字符串函数,常用的几个如下:
由于业务需求变更,企业员工的工号,统一为
5
位数,目前不足
5
位数的全部在前面补
0
。比如:
1
号员 工的工号应该为00001
。
update emp set workno = lpad(workno, 5 , '0' );
💎数值函数
常见的数值函数如下:
通过数据库的函数,生成一个六位数的随机验证码。
思路: 获取随机数可以通过
rand()
函数,但是获取出来的随机数是在
0-1
之间的,所以可以在其基础 上乘以1000000
,然后舍弃小数部分,如果长度不足
6
位,补
0
select lpad(round(rand()* 1000000 , 0 ), 6 , '0' );
💎日期函数
常见的日期函数如下:
curdate:当前日期
select curdate();
datediff:获取两个日期相差的天数
select datediff('2022-08-18', '2022-12-01');
这为啥是负的?
查询所有员工的入职天数,并根据入职天数倒序排序。思路: 入职天数,就是通过当前日期 - 入职日期,所以需要使用 datediff 函数来完成。
select name, datediff(curdate(), entrydate) as 'entrydays' from emp order byentrydays desc ;
💎流程函数
流程函数也是很常用的一类函数,可以在
SQL
语句中实现条件筛选,从而提高语句的效率。
if
select if( false , 'Ok' , 'Error' );// Error
ifnullselect ifnull( 'Ok' , 'Default' );select ifnull( '' , 'Default' );select ifnull( null , 'Default' );
case when then else end需求 : 查询 emp 表的员工姓名和工作地址 ( 北京 / 上海 ----> 一线城市 , 其他 ----> 二线城市 )
selectname,( case workaddress when ' 北京 ' then ' 一线城市 ' when ' 上海 ' then ' 一线城市 ' else' 二线城市 ' end ) as ' 工作地址 'from emp;
案例
create table score(id int comment 'ID' ,name varchar ( 20 ) comment ' 姓名 ' ,math int comment ' 数学 ' ,english int comment ' 英语 ' ,chinese int comment ' 语文 ') comment ' 学员成绩表 ' ;insert into score(id, name, math, english, chinese) VALUES ( 1 , 'Tom' , 67 , 88 , 95), ( 2 , 'Rose' , 23 , 66 , 90 ),( 3 , 'Jack' , 56 , 98 , 76 );
selectid,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;