Mysql你必須知道的命令和函數

引言

在本文中總結一些Mysql的常用命令和函數,也許常見,也許不常見,但是重要。筆者目前整理的一些blog針對面試都是超高頻出現的。大家可以點擊鏈接:http://blog.csdn.net/u012403290

常用、重要命令

1、完整的鏈接mysql命令
mysql -h host -P port -u user -p

這裏寫圖片描述

2、查看所有數據庫
show databases

這裏寫圖片描述

3、選擇某一個數據庫,查看所有表
use database_name;
show tables;

在上面有一個叫mysql的數據庫,這個庫中主要是存放一些配置和用戶,我用命令選擇它同時查看它有哪些表。
這裏寫圖片描述

4、查看當前數據庫
select database()

查看你目前操作的數據庫,比如說前面我use mysql,那麼我當前操作的數據庫就是mysql
這裏寫圖片描述

5、刷新數據庫
flush privileges;

命令本質上的作用是將當前user和privilige表中的用戶信息/權限設置從mysql庫(MySQL數據庫的內置庫)中提取到內存裏。MySQL用戶數據和權限有修改後,希望在”不重啓MySQL服務”的情況下直接生效,那麼就需要執行這個命令。

6、退出mysql
exit或者quit或者CTRL+D退出mysql

7、創建一個用戶
前面有提到,其實mysql的user表就是用戶表,但是如果你不是root用戶,進入mysql是沒有權限操作mysql這個數據庫的,並且表也是屏蔽的。接下來,我們用root用戶創建一個用戶:

insert into mysql.user(Host,User,Password) values(‘localhost’,’brickwork’,password(‘1234’));
先解釋一下上面這個句子,Host的意思是通過哪個IP進行訪問,如果你插入的時候是localhost,或者127.0.0.1,那麼你只能在這臺服務器本身上進行操作它,在別的ip上進行遠程訪問是不允許的。爲什麼插入password是會後需要password(‘1234’)這麼寫,是因爲password是一個函數,它可以把你的密碼進行加密:
這裏寫圖片描述
在創建用戶結束之後,一定要進行數據庫用戶和權限的刷新操作(flush privileges),不然是登錄不了的。

8、給已有用戶分配權限
如果創建一個用戶之後,如果不給它賦予權限,那麼它對所有的私人庫表是不可見的。
這裏寫圖片描述
如果你是DBA,那麼你就需要分派用戶權限。比如說這個brickwork是一個新手,那麼我就只賦予它hospital數據庫的所有表的讀的權限,那麼你就可以這麼描述:
grant select on hospital.* to brickwork @localhost identified by ‘1234’;
逐字逐句翻譯過來就是:賦予查詢的權限在hospital這個數據庫的所有表單上 給 brickwork這個只允許本地登錄的用戶 驗證密碼爲1234
這裏寫圖片描述
通用表達就是這樣的:
grant 權限 on 數據庫.* to 用戶名@登錄主機 identified by “密碼”;
其中,權限包含:select,insert,update,delete,create,drop等14個權限,如果你想知道更多,請進一步研究權限系統。

接下來,我們登錄brickwork這個用戶,查看權限賦予之後,它可見的數據庫有哪些:

這裏寫圖片描述
可以看到區別了,在前面創建用戶之後,我們並不能看到hospital庫,但是權限賦予之後,我們就可以看到hospital庫了。再比如說,我只開放hospital.doctor表給這個用戶又如何呢?具體的學習的朋友可以自己嘗試一下。在前面我們只賦予了brickwork讀的權限,所以我們進行測試,嘗試讀取和寫入:
這裏寫圖片描述
從圖中可以看出,在查詢的時候是可以正常操作的,但是再插入的時候會拋出錯誤,提示權限不足。

9、創建用戶並分配權限
難道一定要創建用戶之後纔可以分配權限嗎?其實並不需要,在上面的權限分配的命令: grant 權限 on 數據庫.* to 用戶名@登錄主機 identified by “密碼”; 其實也保證了用戶創建的所有信息。那麼我們其實可以直接用這一句命令來創建一個新用戶並賦予權限:
這裏寫圖片描述
從圖中可以看到,在執行該條命令的時候,如果用戶不存在,它會直接新建一個用戶,而且不用想前面那樣刷新數據庫。再者,在該創建語句中,我指定newone這個用戶只能夠查詢hospital這個庫中的doctor表,我們看看newone看到的表情況是如何的:
這裏寫圖片描述
那麼這個newone用戶只能查看doctor這一張表,並且他只具有這張表的讀權限。

10、支持任意IP遠程訪問該數據庫

GRANT ALL PRIVILEGES ON . TO ‘root’@’%’ IDENTIFIED BY ‘password’ WITH GRANT OPTION
簡單解釋一下上面的語句,我們前面已經說過了關於權限賦予的命令,其實這條語句就是一個權限賦予的語句。在這個語句中“ALL PRIVILEGES ”表示所有權限,“ON . ”表示對所有的數據庫和表單。“ ‘root’@’%’”表示遠程登錄的用戶名是root,同時%表示任意IP,所以這句話合起來就是遠程任意IP用用戶名root登錄。

11、修改某一個用戶的密碼
set password for 用戶名@登錄主機=password(‘新密碼’);
我要修改用戶名爲brickwork的密碼爲123456:
這裏寫圖片描述

12、查看錶結構
desc table_name

我要查看doctor這個表設計的結構:
這裏寫圖片描述

13、顯示當前數據庫的詳細狀態
status
這裏寫圖片描述

14、顯示最近一條警告信息
show warning;

有的時候,數據庫告訴你一條錯誤警告,但是你沒有注意,或者懶得返回去查看,你就可以用這條命令,記住前提是存在最近的一條警告:
比如說我輸錯了命令,系統給我了我一條警告,然後我用命令打印出最近的警告:
這裏寫圖片描述

15、清空輸入字符
\c

有的時候,我們輸了老長一段sql命令,你明明知道是錯誤的,所以並不想回車執行它,也不想按delete來刪除,那麼你就可以直接用\c來結尾,表示情況所有的輸入字符:
這裏寫圖片描述
在上面的句子中,你發現自己明顯select少寫了一個e,那麼你就可以用\c來結尾,表示清空你寫的命令,重置輸入。注意是反斜槓哦。

16、定義用戶變量
set @var_name = expr[,@var_name=expr]….

比如說我要存儲的一個基準值,這個基準值用於判斷醫生的醫生的優先級,我們定義爲3。如果醫生的id字段大於3表示這個醫生是合法的。那麼我們就可以用用戶變量來表示:
這裏寫圖片描述

函數

這裏所訴述的不包含基本的算術操作符+,-,*,/。我們研究一下mysql的一些重要的數學函數,在這之前,我要說明下,因爲個人習慣問題,我在寫sql命令的時候喜歡用小寫,但是寫函數喜歡用大寫。其實在mysql中不區分命令的大小寫,即使大小寫混合也不會有問題,但是還是建議大家都採用大寫。

1、X的絕對值
ABS(X)
這裏寫圖片描述

2、返回不小於X的最小整數值
CEIL(X)
這裏寫圖片描述
注意,CEIL其實就是返回一個大於X的整數,比如-3.5,那麼大於它的最小整數就是-3。3.5那麼大於它的最小整數就是4。

3、返回不大於X的最大整數值
FLOOR(X)
這裏寫圖片描述
FLOOR和CEIL是相對的。

4、產生隨機數
RAND(),返回一個浮點值,範圍0-1之間

這裏寫圖片描述
自己觀察上面的例子,你會發現RAND(N)中帶參數的隨機數,它的結果都是一致的,它主要是用來產生重複的序列。

5、數值符號
SIGN(X)
傳入一個數值X。SIGN函數會告訴你X是正值,負值或者是0。總共只有3種情況,輸入不規範的數值會報錯:
這裏寫圖片描述

6、控制數據位數
TRUNCATE(X,D)。X是一個待處理的數值,D表示保留小數點左右位數情況。比如說:
X=32.112,D=4 ====> 結果32.1120

X=32.112,D=1 ====> 結果32.1

X= 32.112, D=0 ====> 結果32

X=32.112, D=-1 =====>結果30

X =32.112,D=-2 ======>結果0

這裏寫圖片描述

7、返回最近似的正數

ROUND(X)
這裏寫圖片描述
在參數只有X本身的時候就如上述情況,但是這個函數可以支持兩個參數。ROUND(X,D),這個情況和我們前面說的情況類似,就不一一贅述了,請看博主的測試結果:
這裏寫圖片描述

8、返回字符串的長度
CHAR_LENGTH(str) 與 LENGTH(str)
這裏寫圖片描述
從上面可以看出兩者的差別,對於中文字符,CHAR_LENGTH是當做一個字符記錄的,而LENGTH是當做三個字符記錄的。

9、鏈接兩個字符串
CONCAT(str1,str2…)
這裏寫圖片描述

10、獲取字符串從左/右開始的第幾個字符

LEFT(str,length) 和RIGHT(str,length)
這裏寫圖片描述

11、字符串截取

SUBSTRING(str, pos,length)
這裏寫圖片描述

12、字符串大小寫轉換
LOWER(str)和UPPER(str)
這裏寫圖片描述

其實函數還有很多,包括時間和日期的函數,甚至還有用戶自定義函數,這裏不再繼續深究了,不然篇幅太長了。

尾記

Mysql的這些命令和這些函數都是非常重要和常用的,即使我們不做DBA,但是作爲一個服務端開發者,瞭解這些是必須的,不然你將來怎麼做CTO,怎麼迎娶白富美呢?
希望對大家有所幫助。

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