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

CDA数据分析师 出品

大家好,欢迎来到小编的MySQL课堂。上一系列给大家介绍了MySQL中的索引、关联子查询以及语句的优化技巧,今天给大家讲解下部分的内容——MySQL忘记密码的处理方法、MySQL正则表达式、MySQL自连接方法及应用场景。

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

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

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

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

打开命令行。

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

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

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

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

重新设置密码。

输入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> select ‘abc’ regexp ‘^a’;±------------------+| ‘abc’ regexp ‘^a’ |±------------------+| 1 |±------------------+

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

mysql> SELECT ‘abc’ REGEXP ‘a ; + + a b c R E G E X P a ';+-------------------+| 'abc' REGEXP 'a ’ |±------------------+| 0 |±------------------+mysql> SELECT ‘abc’ REGEXP ‘c ; + + a b c R E G E X P 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 ‘.tab’;±----------------------+| ‘stab’ REGEXP '.tab’ |±----------------------+| 1 |±----------------------+mysql> SELECT ‘stb’ REGEXP ‘.tab’;±---------------------+| ‘stb’ REGEXP '.tab’ |±---------------------+| 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 ‘1’;

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

三、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。

连接后的结果集中查询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 |±----------------±-------------+

疫情当下,昔日匆匆的步伐终于放慢了些,也是时候好好想想自己的职业计划和人生规划了。提前做好准备,未雨绸缪,为未来蓄能——蓄势待发!


  1. A-Z ↩︎

发布了2740 篇原创文章 · 获赞 276 · 访问量 56万+

猜你喜欢

转载自blog.csdn.net/yoggieCDA/article/details/105586299