MySQL(四)数据控制语言DCL和函数--字符串、数值、日期、流程函数详细讲解(笔记,细节,对应练习)

📅 2026/6/25 22:00:36
MySQL(四)数据控制语言DCL和函数--字符串、数值、日期、流程函数详细讲解(笔记,细节,对应练习)
6.数据控制语言DCLDCL用来管理数据库用户、控制数据库的访问权限。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 yanlocalhost identified by 123456; -- 创建用户 mie 可以在任意主机访问该数据库密码123456 create user mie% identified by 123456; -- 修改用户 yan 的访问密码为1234; alter user yanlocalhost identified with mysql_native_password by 1234; -- 删除用户 drop user yanlocalhost;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 yanlocalhost identified by 123456; -- 创建用户 mie 可以在任意主机访问该数据库密码123456 create user mie% identified by 123456; -- 修改用户 yan 的访问密码为1234; alter user yanlocalhost identified with mysql_native_password by 1234; -- 删除用户 drop user yanlocalhost; -- 查询权限 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-ddCURTIME()返回当前时间hh:mm:ssNOW()返回当前日期和时间yyyy-mm-dd hh:mm:ssYEAR(date)获取指定date的年份MONTH(date)获取指定date的月份DAY(date)获取指定date的日期每月的第几号DATE_ADD(date,INTERVAL expr type)返回一个日期/时间值加上一个时间间隔expr后的时间值DATEDIFF(date1,date2)返回起始时间date1和结束时间date2之间的天数date1减date2DATE_ADD(date,INTERVAL expr type)函数细节expr如果是正数表示从时间date向后推如果是负数就表示往前推如果是0就表示是date本身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否则返回fIFNULL(value1, value2)如果value1不为空返回value1否则返回value2CASE WHEN [ val1 ] THEN [ res1 ] … ELSE [ default ] END如果val1为true返回res1… 否则返回defaultCASE [ expr ] WHEN [ val1 ] THEN [ res1 ] … ELSE [ default ] END如果expr的值等于val1返回res1… 否则返回defaultselect 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;