分享

MySQL(下)忘记密码处理方法、正则表达式、自连接方法及应用场景

 文炳春秋 2020-07-17

MySQL忘记密码的处理方法、MySQL正则表达式、MySQL自连接方法及应用场景。

一、MySQL忘记密码的处理方法

在我们的日常工作中,经常要使用大量的应用程序,网站之类的,各种各样的用户名和密码。经常出现的事情就是忘记了密码……这样会给我们造成很大的困扰,那么今天我们就一起来看一下MySQL忘记密码的处理方法~

如果你需要修改密码,可以按照如下方案进行操作:

将MySQL的服务关闭。在运行窗口中输入services.msc打开服务窗口,找到mysql服务右键点击选择停止,即可关闭服务。

MySQL(下)忘记密码处理方法、正则表达式、自连接方法及应用场景

MySQL(下)忘记密码处理方法、正则表达式、自连接方法及应用场景

打开命令行。

打开MySQL安装路径,进入到bin目录中复制路径。打开cmd,输入cd C:\Program Files (x86)\MySQL\MySQL Server 5.0\bin回车。

MySQL(下)忘记密码处理方法、正则表达式、自连接方法及应用场景

MySQL(下)忘记密码处理方法、正则表达式、自连接方法及应用场景

输入mysqld --skip-grant-tables回车。

如果你的mysql安装路径bin目录下存在mysqld.exe文件这条命令没问题,但是如果没有这个文件就会提示mysqld命令找不到之类的错误,我的电脑就是,因为我的电脑mysql安装bin目录下不存在mysqld.exe文件所以会报错,但是bin目录下存在mysql-nt.exe所以,上条命令就改为mysqld-nt --skip-grant-tables然后回车,此时这个命令行就不能输入东西了,类似于卡了的状态,这时先不用管这个命令行,再打开一个新的命令行。

MySQL(下)忘记密码处理方法、正则表达式、自连接方法及应用场景

打开新的命令行,输入mysql -uroot -p回车,会发现我们可以不需要密码就可以登陆。

MySQL(下)忘记密码处理方法、正则表达式、自连接方法及应用场景

重新设置密码。

输入update user set Password=password('new-password') where user='root';即可修改密码。

update user set Password=password('new-password') where user='root';

-使用新密码登录即可。

忘记密码的处理方法,你学会了吗?

下次再也不用担心自己忘记密码啦,是不是很开心?!

二、MySQL正则表达式

正则表达式用来描述或者匹配符合规则的字符串。它的用法和like比较相似,但是它又比like更强大,能够实现一些很特殊的规则匹配。正则表达式需要使用REGEXP命令,匹配到返回"1",匹配不到返回"0",默认不加条件REGEXP相当于like '%%'。在前面加上NOT相当于NOT LIKE。

MySQL(下)忘记密码处理方法、正则表达式、自连接方法及应用场景

在字符串开始处进行匹配:^

mysql> select 'abc' regexp '^a';+-------------------+| 'abc' regexp '^a' |+-------------------+| 1 |+-------------------+

在字符串末尾开始匹配:$

mysql> SELECT 'abc' REGEXP 'a$';+-------------------+| 'abc' REGEXP 'a$' |+-------------------+| 0 |+-------------------+mysql> SELECT 'abc' REGEXP 'c$';+-------------------+| 'abc' REGEXP 'c$' |+-------------------+| 1 |+-------------------+

匹配任意字符:.

mysql> SELECT 'abc' REGEXP '.a';+-------------------+| 'abc' REGEXP '.a' |+-------------------+| 0 |+-------------------+mysql> SELECT 'abc' REGEXP '.b';+-------------------+| 'abc' REGEXP '.b' |+-------------------+| 1 |+-------------------+mysql> SELECT 'abc' REGEXP '.c';+-------------------+| 'abc' REGEXP '.c' |+-------------------+| 1 |+-------------------+mysql> SELECT 'abc' REGEXP 'a.';+-------------------+| 'abc' REGEXP 'a.' |+-------------------+| 1 |+-------------------+

匹配括号内的任意单个字符:[...]

mysql> SELECT 'abc' REGEXP '[xyz]';+----------------------+| 'abc' REGEXP '[xyz]' |+----------------------+| 0 |+----------------------+mysql> SELECT 'abc' REGEXP '[xaz]';+----------------------+| 'abc' REGEXP '[xaz]' |+----------------------+| 1 |+----------------------+

匹配不在括号内的任意单个字符:...^符合只有在[]内才是==取反==的意思,在别的地方都是表示开始处匹配。

mysql> SELECT 'a' REGEXP '[^abc]';+---------------------+| 'a' REGEXP '[^abc]' |+---------------------+| 0 |+---------------------+mysql> SELECT 'x' REGEXP '[^abc]';+---------------------+| 'x' REGEXP '[^abc]' |+---------------------+| 1 |+---------------------+mysql> SELECT 'abc' REGEXP '[^a]';+---------------------+| 'abc' REGEXP '[^a]' |+---------------------+| 1 |+---------------------+

REGEXP 前的匹配字符作为一个整体,'abc'作为一个整体,所以它匹配不了a。匹配0个或多个a,包括空字符串:a*可以作为占位符使用.有没有指定字符都可以匹配到数据。

mysql> SELECT 'stab' REGEXP '.ta*b';+-----------------------+| 'stab' REGEXP '.ta*b' |+-----------------------+| 1 |+-----------------------+mysql> SELECT 'stb' REGEXP '.ta*b';+----------------------+| 'stb' REGEXP '.ta*b' |+----------------------+| 1 |+----------------------+mysql> SELECT '' REGEXP 'a*';+----------------+| '' REGEXP 'a*' |+----------------+| 1 |+----------------+

匹配1个或者多个a,不包括空字符:a+

mysql> SELECT 'stab' REGEXP '.ta+b';+-----------------------+| 'stab' REGEXP '.ta+b' |+-----------------------+| 1 |+-----------------------+mysql> SELECT 'stb' REGEXP '.ta+b';+----------------------+| 'stb' REGEXP '.ta+b' |+----------------------+| 0 |+----------------------+

匹配0个或者1个a:a?

mysql> SELECT 'stb' REGEXP '.ta?b';+----------------------+| 'stb' REGEXP '.ta?b' |+----------------------+| 1 |+----------------------+mysql> SELECT 'stab' REGEXP '.ta?b';+-----------------------+| 'stab' REGEXP '.ta?b' |+-----------------------+| 1 |+-----------------------+mysql> SELECT 'staab' REGEXP '.ta?b';+------------------------+| 'staab' REGEXP '.ta?b' |+------------------------+| 0 |+------------------------+

匹配a1或者a2:a1|a2

mysql> SELECT 'a' REGEXP 'a|b';+------------------+| 'a' REGEXP 'a|b' |+------------------+| 1 |+------------------+mysql> SELECT 'b' REGEXP 'a|b';+------------------+| 'b' REGEXP 'a|b' |+------------------+| 1 |+------------------+mysql> SELECT 'b' REGEXP '^(a|b)';+---------------------+| 'b' REGEXP '^(a|b)' |+---------------------+| 1 |+---------------------+mysql> SELECT 'a' REGEXP '^(a|b)';+---------------------+| 'a' REGEXP '^(a|b)' |+---------------------+| 1 |+---------------------+mysql> SELECT 'c' REGEXP '^(a|b)';+---------------------+| 'c' REGEXP '^(a|b)' |+---------------------+| 0 |+---------------------+

匹配m个a:a{m}

mysql> SELECT 'auuuuc' REGEXP 'au{4}c';+--------------------------+| 'auuuuc' REGEXP 'au{4}c' |+--------------------------+| 1 |+--------------------------+mysql> SELECT 'auuuuc' REGEXP 'au{3}c';+--------------------------+| 'auuuuc' REGEXP 'au{3}c' |+--------------------------+| 0 |+--------------------------+

匹配m个或者更多个a:a{m,}

mysql> SELECT 'auuuuc' REGEXP 'au{3,}c';+---------------------------+| 'auuuuc' REGEXP 'au{3,}c' |+---------------------------+| 1 |+---------------------------+mysql> SELECT 'auuuuc' REGEXP 'au{4,}c';+---------------------------+| 'auuuuc' REGEXP 'au{4,}c' |+---------------------------+| 1 |+---------------------------+mysql> SELECT 'auuuuc' REGEXP 'au{5,}c';+---------------------------+| 'auuuuc' REGEXP 'au{5,}c' |+---------------------------+| 0 |+---------------------------+

匹配m到n个a,包含m和n:a{m,n}

mysql> SELECT 'auuuuc' REGEXP 'au{3,5}c';+----------------------------+| 'auuuuc' REGEXP 'au{3,5}c' |+----------------------------+| 1 |+----------------------------+mysql> SELECT 'auuuuc' REGEXP 'au{4,5}c';+----------------------------+| 'auuuuc' REGEXP 'au{4,5}c' |+----------------------------+| 1 |+----------------------------+mysql> SELECT 'auuuuc' REGEXP 'au{5,10}c';+-----------------------------+| 'auuuuc' REGEXP 'au{5,10}c' |+-----------------------------+| 0 |+-----------------------------+

将abc作为一个序列匹配:(abc)不用括号括起来都是用单个字符去匹配,如果要把多个字符作为一个整体去匹配就需要用到括号,所以括号适合上面的所有情况。

mysql> SELECT 'xababy' REGEXP 'x(abab)y';+----------------------------+| 'xababy' REGEXP 'x(abab)y' |+----------------------------+| 1 |+----------------------------+mysql> SELECT 'xababy' REGEXP 'x(ab)*y';+---------------------------+| 'xababy' REGEXP 'x(ab)*y' |+---------------------------+| 1 |+---------------------------+mysql> SELECT 'xababy' REGEXP 'x(ab){1,2}y';+-------------------------------+| 'xababy' REGEXP 'x(ab){1,2}y' |+-------------------------------+| 1 |+-------------------------------+

总结:

· 使用REGEXP和NOT REGEXP操作符(类似LIKE和NOT LIKE)

· REGEXP默认也是不区分大小写,可以使用BINARY关键词强制区分大小写: WHERE NAME REGEXP BINARY '^[A-Z]';

REGEXP默认是部分匹配原则,即有一个匹配上则返回真。例如:SELECT 'Abc' REGEXP BINARY '[A-Z]'。

MySQL(下)忘记密码处理方法、正则表达式、自连接方法及应用场景

三、MySQL自连接方法及应用场景

MySQL自连接就是在同一张表上自己连接自己,参与连接的表是同一张表,通过设置表别名虚拟出两张表。当我们想将表中行与同一表中的其他行组合或运算时,可以使用自连接。要执行自连接操作必须使用表别名来帮助MySQL在查询中区分连接后的虚拟结果集中的字段。示例:员工信息表中有每位员工的工号、姓名、职位、直属领导工号、入职日期、底薪、提成和所属部门,其中13位员工分别有对应的直属领导,一位领导会有多名下属员工,现在需要查询所有领导者的姓名及其对应的下属员工的姓名。

mysql> select * from emp;+-------+--------+------------+------+------------+------+------+--------+| empno | ename | job | mgr | hiredate | sal | comm | deptno |+-------+--------+------------+------+------------+------+------+--------+| 7369 | smith | clerk | 7902 | 1980-12-17 | 800 | NULL | 20 || 7499 | allen | salesman | 7698 | 1981-02-20 | 1600 | 300 | 30 || 7521 | ward | salesman | 7698 | 1981-02-22 | 1250 | 500 | 30 || 7566 | jones | manager | 7839 | 1981-04-02 | 2975 | NULL | 20 || 7654 | martin | salesman | 7698 | 1981-09-28 | 1250 | 1400 | 30 || 7698 | blake | manager | 7839 | 1981-05-01 | 2850 | NULL | 30 || 7782 | clark | manager | 7839 | 1981-06-09 | 2450 | NULL | 10 || 7788 | scott | analyst | 7566 | 1987-04-19 | 3000 | NULL | 20 || 7839 | king | persident | NULL | 1981-11-17 | 5000 | NULL | 10 || 7844 | turner | salesman | 7698 | 1981-09-08 | 1500 | 0 | 30 || 7876 | adams | clerk | 7788 | 1987-05-23 | 1100 | NULL | 20 || 7900 | james | clerk | 7698 | 1981-12-03 | 950 | NULL | 30 || 7902 | ford | analyst | 7566 | 1981-12-03 | 3000 | NULL | 20 || 7934 | miller | clerk | 7782 | 1982-01-23 | 1300 | NULL | 10 |+-------+--------+------------+------+------------+------+------+--------+

可以通过设置别名的方式模拟两张表分别为t1、t2,t1为领导信息表,t2为员工信息表,将两张表连接起来,连接条件为t1.empno=t2.mgr。

MySQL(下)忘记密码处理方法、正则表达式、自连接方法及应用场景

连接后的结果集中查询t1.ename,t2.ename即所有领导者的姓名及其对应的下属员工的姓名。

mysql> select t1.ename 上层管理者,t2.ename 下属员工 -> from emp t1 inner join emp t2 on t1.empno = t2.mgr;+-----------------+--------------+| 上层管理者 | 下属员工 |+-----------------+--------------+| ford | smith || blake | allen || blake | ward || king | jones || blake | martin || king | blake || king | clark || jones | scott || blake | turner || scott | adams || blake | james || jones | ford || clark | miller |+-----------------+--------------+

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多