MySQL(四)数据控制语言DCL和函数--字符串、数值、日期、流程函数详细讲解(笔记,细节,对应练习)
2026/6/25 22:00:33 网站建设 项目流程

6.数据控制语言DCL

DCL,用来管理数据库用户、控制数据库的访问权限。

6.1 DCL-管理用户

查询用户

USE mysql -- use mysql SELECT * FROM user; -- select * from user;
  • 用户信息、用户访问权限存放在系统数据库mysql中的user表当中的

创建用户

CREATE USER '用户名'@'主机名' IDENTIFIED BY '密码'; -- create user '用户名'@'主机名' identified by '密码';
  • 创建用户指定用户名,主机名(即在哪个主机上可以访问该用户),identified by '密码'指的是当前用户的访问密码

修改用户密码

-- MySQL 5.7.6 及以上版本使用 ALTER USER '用户名'@'主机名' IDENTIFIED [WITH mysql_native_password] BY '新密码'; -- alter user '用户名'@'主机名' identified [with mysql_native_password] by '新密码'; -- MySQL 5.7.6 以下版本使用 SET PASSWORD FOR '用户名'@'主机名' = PASSWORD('new_password'); -- set password for '用户名'@'主机名' = password('new_password');

修改用户名和主机名

RENAME USER '用户名'@'主机名' TO '新用户名'@'新主机名';

删除用户

DROP USER '用户名'@'主机名'; drop user '用户名'@'主机名';
注意:
  • 主机名可以用%通配,表示所有主机

  • localhost代表当前主机,这类语言主要是DBA数据库管理员)使用。

-- 创建用户 这里只能在主机'localhost'访问 create user 'yan'@'localhost' identified by '123456'; -- 创建用户 mie 可以在任意主机访问该数据库,密码123456 create user 'mie'@'%' identified by '123456'; -- 修改用户 yan 的访问密码为1234; alter user 'yan'@'localhost' identified with mysql_native_password by '1234'; -- 删除用户 drop user 'yan'@'localhost';

6.2 DCL-权限控制

权限

说明

ALL, ALL PRIVILEGES

所有权限

SELECT

查询数据

INSERT

插入数据

UPDATE

修改数据

DELETE

删除数据

ALTER

修改表

DROP

删除数据库/表/视图

CREATE

创建数据库/表

查询权限

SHOW GRANTS FOR '用户名'@'主机名'; -- show grants for '用户名'@'主机名';

授予权限

GRANT 权限列表 ON 数据库名.表名 TO '用户名'@'主机名'; -- grant 权限列表 on 数据库.表名 to '用户名'@'主机名'; 把哪个数据库的哪个表的权限 授予 to----

撤销权限

REVOKE 权限列表 ON 数据库名.表名 FROM '用户名'@'主机名'; -- revoke 权限列表 on 数据库.表名 from '用户名'@'主机名';
  • 多个权限之间,使用逗号分隔

  • USAGE代表用户没有任何权限,创建一个用户后用户权限默认是USAGE

  • 授权时,数据库名或表名可以使用*通配符,代表所有数据库或表

-- 创建用户 这里只能在主机'localhost'访问 create user 'yan'@'localhost' identified by '123456'; -- 创建用户 mie 可以在任意主机访问该数据库,密码123456 create user 'mie'@'%' identified by '123456'; -- 修改用户 yan 的访问密码为1234; alter user 'yan'@'localhost' identified with mysql_native_password by '1234'; -- 删除用户 drop user 'yan'@'localhost'; -- 查询权限 show grants for 'mie'@'%'; -- 授予权限 grant all on wang.* to 'mie'@'%'; -- 撤销权限 revoke all on wang.* from 'mie'@'%';

6.3 函数

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

6.3.1 字符串函数

函数

说明

CONCAT(S1,S2,...,Sn)

字符串拼接,将S1,S2,...,Sn拼接成一个字符串

LOWER(str)

将字符串str全部转为小写

UPPER(str)

将字符串str全部转为大写

LPAD(str,n,pad)

左填充,用字符串pad对str的左边进行填充,达到n个字符串长度

RPAD(str,n,pad)

右填充,用字符串pad对str的右边进行填充,达到n个字符串长度

TRIM(str)

去掉字符串头部和尾部的空格

SUBSTRING(str,start,len)

返回从字符串str的start位置开始的len个长度的字符串(默认索引从1开始)

SELECT 函数(参数);

select concat('Hello' , 'MySQL'); select lower('Hello'); select upper('Hello'); select lpad('01', 5, '-'); --左填充 select rpad('01', 5, '-'); --右填充 select trim(' Hello MySQL '); select substring('Hello MySQL',1,5);

update employees set workID = lpad(workID, 5, '0');
6.3.2 数值函数

函数

功能

CEIL(x)

向上取整

FLOOR(x)

向下取整

MOD(x,y)

返回x/y的模

RAND()

返回0~1内的随机数

ROUND(x,y)

求参数x的四舍五入的值,保留y位小数

select ceil(1.1); select floor(1.9); select mod(3, 4); select mod(4, 3); select rand(); select round(2.345,2);

select lpad(round(rand()*1000000 , 0), 6, '0');
6.3.3 日期函数

函数

功能

CURDATE()

返回当前日期(yyyy-mm-dd)

CURTIME()

返回当前时间(hh:mm:ss)

NOW()

返回当前日期和时间(yyyy-mm-dd hh:mm:ss)

YEAR(date)

获取指定date的年份

MONTH(date)

获取指定date的月份

DAY(date)

获取指定date的日期(每月的第几号)

DATE_ADD(date,INTERVAL expr type)

返回一个日期/时间值加上一个时间间隔expr后的时间值

DATEDIFF(date1,date2)

返回起始时间date1和结束时间date2之间的天数(date1减date2)

DATE_ADD(date,INTERVAL expr type)函数细节:

  1. expr如果是正数,表示从时间date向后推,如果是负数就表示往前推,如果是0就表示是date本身

  2. type常用的类型:YEAR(年)、MONTH(月)、DAY(天)、HOUR(小时)、MINUTE(分钟)、SECOND(秒)

select curdate(); select curtime(); select now(); select year(now()); select month(now()); select day(now()); select date_add(now(), INTERVAL 70 YEAR); select date_add(now(), INTERVAL 4 MONTH); select date_add(now(), INTERVAL 256 DAY); select datediff('2026-10-15', '2026-06-10');

select name, datediff(curdate(), entrydate) as 'entrydays' from employees order by entrydays desc;
6.3.4 流程函数

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

函数

功能

IF(value, t, f)

如果value为true,则返回t,否则返回f

IFNULL(value1, value2)

如果value1不为空,返回value1,否则返回value2

CASE WHEN [ val1 ] THEN [ res1 ] … ELSE [ default ] END

如果val1为true,返回res1,… 否则返回default

CASE [ expr ] WHEN [ val1 ] THEN [ res1 ] … ELSE [ default ] END

如果expr的值等于val1,返回res1,… 否则返回default

select if(true, 'OK' ,'Error'); select if(false, 'OK' ,'Error'); select ifnull('Ok', 'Default'); select ifnull(null, 'Default'); -- 查询employees表中的员工姓名和工作地址(北京/上海--->一线城市 , 其他----> 二线城市) -- CASE [ expr ] WHEN [ val1 ] THEN [ res1 ] … ELSE [ default ] END select name, (case workaddress when '北京' then '一线城市' when '上海' then '一线城市' else '二线城市' end ) as '工作地址' from employees;

-- CASE WHEN [ val1 ] THEN [ res1 ] … ELSE [ default ] END select id, 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;

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询