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;++abcREGEXPa';+-------------------+| 'abc' REGEXP 'a’ |±------------------+| 0 |±------------------+mysql> SELECT ‘abc’ REGEXP ‘c;++abcREGEXPc';+-------------------+| '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 ↩︎

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章