1、root用戶密碼丟失或從新設置mysql
方法1: 用SET PASSWORD命令 sql
首先登陸MySQL。 數據庫
格式:mysql> set password for 用戶名@localhost = password('新密碼'); ide
例子:mysql> set password for root@localhost = password('123'); 函數
方法2:用mysqladmin 工具
格式:mysqladmin -u用戶名 -p舊密碼 password 新密碼 性能
例子:mysqladmin -uroot -p123456 password 123 ui
方法3:用UPDATE直接編輯user表 spa
首先登陸MySQL。 命令行
mysql> use mysql;
mysql> update user set password=password('123') where user='root' and host='localhost';
mysql> flush privileges;
方法4:在忘記root密碼的時候,能夠這樣
1. 關閉正在運行的MySQL服務。
3. 輸入mysqld_safe --skip-grant-tables 回車。--skip-grant-tables
的意思是啓動MySQL服務的時候跳過權限表認證。
5. 輸入mysql回車,若是成功,將出現MySQL提示符 >。
6. 鏈接權限數據庫: use mysql; 。
6. 改密碼:update user set password=password("123") where user="root";(別忘了最後加分號) 。
7. 刷新權限(必須步驟):flush privileges; 。
8. 退出 quit。
9. 註銷系統,再進入,使用用戶名root和剛纔設置的新密碼123登陸。
2、檢索數據:
1.檢索單個列:
SELECT prod_name FROM Products;
2.檢索多個列:
SELECT prod_id, prod_name, prod_price FROM Products;
3.檢索全部列:
SELECT * FROM Products;
4.檢索不一樣的值
SELECT DISTINCT vend_id FROM Products;
5.限制顯示結果:
SELECT prod_name FROM Products LIMIT 5; --顯示前五行
select name from usertb where age > 20 limit 0, 1; //限制從第一條開始,顯示1條
select name from usertb where age > 20 limit 1; //同上面的一個效果
select name from usertb where age > 20 limit 4, 1; //顯示從第五條開始,顯示1條
6.註釋:
1)在mysql腳本中,--後面的字段是註釋信息,
2)或者使用#進行註釋,
在命令行中執行的時候,註釋的後面要加上;,表示註釋結束。
3)註釋從/*開始,到*/結束,/*和*/之間的任何內容都是註釋。這種方式經常使用於給代碼加註釋,就如這個例子演示的,這裏定義了兩個SELECT語
句,可是第一個不會執行,由於它已經被註釋掉了。
3、排序檢索數據
1.按單個列進行排序
SELECT prod_name FROM Products ORDER BY prod_name;
除了指示DBMS軟件對prod_name列以字母順序排序數據的ORDER BY子句外,這條語句與SELECT prod_name FROM Products;是同樣的。
注意:一般,ORDER BY子句中使用的列將是爲顯示而選擇的列。可是,實際上並不必定要這樣,用非檢索的列排序數據是徹底合法的
2.按多個列進行排序
SELECT prod_id, prod_price, prod_name FROM Products ORDER BY prod_price, prod_name;
重要的是理解在按多個列排序時,排序的順序徹底按規定進行。換句話說,對於上述例子中的輸出,僅在多個行具備相同的prod_price值時才
對產品按prod_name進行排序。若是prod_price列中全部的值都是惟一的,則不會按prod_name排序。
3.按列位置進行排序:
SELECT prod_id,prod_price,prod_name FROM Products ORDER BY 2,3;
SELECT清單中指定的是選擇列的相對位置而不是列名。ORDER BY 3表
示按SELECT清單中的第二個列prod_name進行排序。ORDER BY 2,3表示先按prod_price,再按prod_name進行排序。
這一技術的主要好處在於不用從新輸入列名。但它也有缺點。首先,不明確給出列名有可能形成錯用列名排序。其次,在對SELECT清單進行更
改時容易錯誤地對數據進行排序(忘記對ORDER BY子句作相應的改動)。最後,若是進行排序的列不在SELECT清單中,顯然不能使用這項技
術。
按非選擇列排序
顯然,當根據不出如今SELECT清單中的列進行排序時,不能採用這項技術。可是,若是有必要,能夠混合匹配使用實際列名和相對列位置。
4.指定排序方向
數據排序不限於升序排序(從A到Z),這只是默認的排序順序。還可使用ORDER BY子句進行降序(從Z到A)排序。爲了進行降序排序,必須指定DESC關鍵字。
SELECT prod_id, prod_price, prod_name FROM Products ORDER BY prod_price DESC;
多列排序:
SELECT prod_id, prod_price, prod_name FROM Products ORDER BY prod_price DESC, prod_name;
DESC關鍵字只應用到直接位於其前面的列名。在上例中,只對prod_price列指定DESC,對prod_name列不指定。所以,prod_price列以降序排
序,而prod_name列(在每一個價格內)仍然按標準的升序排序。
若是想在多個列上進行降序排序,必須對每一列指定DESC關鍵字。
與DESC相對的是ASC(或ASCENDING),在升序排序時能夠指定它。但實際
上,ASC沒有多大用處,由於升序是默認的(若是既不指定ASC也不指定DESC,則假定爲ASC)。
4、使用WHERE過濾數據
1.SELECT prod_name, prod_price FROM Products WHERE prod_price = 3.49;--使用等於,不等於則使用!=
注意:在同時使用ORDER BY和WHERE子句時,應該讓ORDER BY位於WHERE以後,不然將會產生錯誤
2.WHERE的操做符:
=:等於;<>或!=:不等於;<;<=;>;>=;BETWEEN指定的兩個值之間;IS NULL:爲空;
示例:檢索單個值:
SELECT prod_name, prod_price FROM Products WHERE prod_price < 10;
SELECT prod_name, prod_price FROM Products WHERE prod_price < 10;
不匹配檢查:
SELECT vend_id, prod_name FROM Products WHERE vend_id <> 'DLL01';
範圍值檢查
SELECT prod_id,prod_price,prod_name FROM Products WHERE prod_price BETWEEN 5.99 AND 9.49;
空值檢查:
SELECT prod_name FROM Products WHERE prod_price IS NULL;
提示:什麼時候使用引號
若是仔細觀察上述WHERE的條件,會看到有的值括在單引號內,而有的值未括起來。單引號用來限定字符串。若是將值與字符串類型的列進行比較,就須要限定引號。用來與數值列進行比較的值不用引號。
5、高級數據過濾:多個WHERE子句用AND或者OR鏈接
1.AND操做符
SELECT prod_id, prod_price, prod_name FROM Products WHERE vend_id = 'DLL01' AND prod_price <= 4;
SELECT prod_id,prod_price,prod_name FROM Products WHERE vend_id = 'DLL01' AND prod_price <= 4 ORDER BY prod_id DESC ;
2.OR
WHERE子句中使用的關鍵字,用來表示檢索匹配任一給定條件的行。
SELECT vend_id,prod_id,prod_price,prod_name FROM Products WHERE vend_id = 'DLL01' OR prod_price <= 4 ORDER BY prod_id DESC ;
3.求值順序:
假如須要列出價格爲10美圓及以上,且由DLL01或BRS01製造的全部產品。
SELECT vend_id,prod_id,prod_name,prod_price FROM Products WHERE prod_price > 10 AND (vend_id = 'DLL01' OR vend_id = 'BRS01');
提示:在WHERE子句中使用圓括號任什麼時候候使用具備AND和OR操做符的WHERE子句,都應該使用圓括號明確地分組操做符。不要過度依賴默認求值順序,即便它確實如你但願的那樣。使用圓括號沒有什麼壞處,它能消除歧義。
4.IN操做:
IN操做符用來指定條件範圍,範圍中的每一個條件均可以進行匹配。IN取一組由逗號分隔、括在圓括號中的合法值。完成了OR相同的效果
SELECT vend_id,prod_name, prod_price FROM Products WHERE vend_id IN ( 'DLL01', 'BRS01' ) ORDER BY prod_name;等價於下面的語句
SELECT prod_name, prod_price FROM Products WHERE vend_id = 'DLL01' OR vend_id = 'BRS01' ORDER BY prod_name;
爲何要使用IN操做符?其優勢爲:
在有不少合法選項時,IN操做符的語法更清楚,更直觀。
在與其餘AND和OR操做符組合使用IN時,求值順序更容易管理。
IN操做符通常比一組OR操做符執行得更快(在上面這個合法選項不多的例子中,你看不出性能差別)。
IN的最大優勢是能夠包含其餘SELECT語句,可以更動態地創建WHERE子句。
5.NOT操做符
WHERE子句中的NOT操做符有且只有一個功能,那就是否認其後所跟的任何條件。
SELECT prod_name,prod_price FROM Products WHERE prod_price NOT IN (3.49,5.99) ORDER BY prod_id DESC ;
6、用通配符進行過濾
1.謂詞(predicate)
操做符什麼時候不是操做符?答案是,它做爲謂詞時。從技術上說,LIKE是謂詞而不是操做符。雖然最終的結果是相同的,但應該對此術語有所瞭解,以避免在SQL文獻或手冊中遇到此術語時不知所云。
2.通配符搜索只能用於文本字段(串),非文本數據類型字段不能使用通配符搜索。
3.百分號(%)通配符
最常使用的通配符是百分號(%)。在搜索串中,%表示任何字符出現任意次數。例如,爲了找出全部以詞Fish起頭的產品,可發佈如下SELECT語句:
SELECT prod_id, prod_name FROM Products WHERE prod_name LIKE 'Fish%';
通配符可在搜索模式中的任意位置使用,而且可使用多個通配符。下面的例子使用兩個通配符,它們位於模式的兩端:
SELECT prod_id, prod_name FROM Products WHERE prod_name LIKE '%bean bag%';
通配符也能夠出如今搜索模式的中間,雖然這樣作不太有用。下面的例子找出以F起頭、以y結尾的全部產品:
SELECT prod_name FROM Products WHERE prod_name LIKE 'F%y';
說明:請注意後面所跟的空格
包括Access在內的許多DBMS都用空格來填補字段的內容。例如,若是某列有50個字符,而存儲的文本爲Fish bean bag toy(17個字符),則爲填滿該列須要在文本後附加33個空格。這樣作通常對數據及其使用沒有影響,可是可能對上述SQL語句有負面影響。子句WHEREprod_name LIKE 'F%y'只匹配以F開頭、以y結尾的prod_name。若是值後面跟空格,則不是以y結尾,因此Fish bean bag toy就不會檢索出來。簡單的解決辦法是給搜索模式再增長一個%號:'F%y%'還匹配y以後的字符(或空格)。更好的解決辦法是用函數去掉空格。
警告:請注意NULL
通配符%看起來像是能夠匹配任何東西,但有個例外,這就是NULL。子句WHERE prod_name LIKE '%'不會匹配產品名稱爲NULL的行。
4.下劃線(_)通配符
另外一個有用的通配符是下劃線(_)。下劃線的用途與%同樣,但它只匹配單個字符,而不是多個字符。
SELECT prod_id, prod_name FROM Products WHERE prod_name LIKE '__ inch teddy bear';
5.通配符使用技巧:
正如所見,SQL的通配符頗有用。但這種功能是有代價的,即通配符搜索通常比前面討論的其餘搜索要耗費更長的處理時間。
使用技巧
不要過分使用通配符。若是其餘操做符能達到相同的目的,應該使用其餘操做符。
在確實須要使用通配符時,也儘可能不要把它們用在搜索模式的開始處。把通配符置於開始處,搜索起來是最慢的。
仔細注意通配符的位置。若是放錯地方,可能不會返回想要的數據。
總之,通配符是一種極其重要和有用的搜索工具,之後咱們常常會用到它。