mysql命令行客戶端登錄
#默認端口3306 主機本地localhost
mysql -u root -p
#寫全的話
mysql -u root -p -h localhost -P 3307
解釋一下:-u 用戶名為root -p 密碼待輸入 -h 主機名localhost -P 注意大寫P ,意思是端口號3307
數(shù)據(jù)庫操作
#展示所有數(shù)據(jù)庫
show databases;
#使用數(shù)據(jù)庫
use kls;
#展示數(shù)據(jù)庫中所有的表
show tables;
#展示person表的字段
show columns from person;
#show columns from 可以用describe代替
describe person;

mysql不區(qū)分大小寫,但是為了易于閱讀,開發(fā)人員經(jīng)常把關(guān)鍵字大寫,列和表名小寫。(反正我是遵守不了,看大寫的英文難受)
檢索不同的行
如果查詢學(xué)生表的年齡,每個年齡只出現(xiàn)一次
select distinct age from student;
限制返回結(jié)果數(shù)
limit 5 表示從第1行開始,返回5條記錄
select name from student limit 5;
limit 5, 5表示從第5行開始,返回5條數(shù)據(jù)
select name from student limit 5,5;
另一種寫法:limit 2 offset 3 代表從行3(也就是第四行)開始取2行
select name from student limit 2 offset 3;
排序order by
注意:order by 不僅可以按照檢索的列排序,用非檢索的列排序也是合法的。
注意:在多個列進行降序排序,需要在每個列指定DESC關(guān)鍵字,因為不指定的都默認ASC升序排列。
注意:order by 和 limit連用的時候,limit放在order by的后面。
between操作符
用來檢索在兩個數(shù)值之間的記錄,例如查詢在18-20歲之間的學(xué)生
select * from student t where t.age between 18 and 20;
通配符 % 和 _
mysql使用LIKE操作符跟%通配符進行模糊搜索。
#查詢姓李的學(xué)生
select name from student where name like '李%';
①注意:根據(jù)mysql的配置方式,搜索是要區(qū)分大小寫的,例如模糊搜索中'jet%'是不會匹配JetPack的。
②注意'%jet%'表示匹配任何位置包括jet文本的值,而不論他之前或之后出現(xiàn)什么值。
③%表示搜索模式指定位置有0到多個任意字符。
④注意通配符_下劃線,只能匹配1個字符,不能多也不能少。
⑤%不會匹配NULL行,即使是like '%'也不會匹配NULL行。
⑥通配符一般處理時間比其他搜索要長,其他操作能達到盡量不要使用,使用通配符時候除非有絕對必要,否則不要把通配符用在開始處,因為放在開始處,搜索會最慢。
使用mysql正則表達式
mysql使用
regexp表示后面跟的內(nèi)容為正則表達式
基本字符匹配
#正則匹配姓名為小剛的行
select * from student where name regexp '小剛';
. 點號是正則表達式中的一個重要字符,表示匹配任意一個字符。
#正則匹配0前面有任意一個字符的行,例如10、20等
select * from student where age regexp '.0';
正則表達式不區(qū)分大小寫,為了區(qū)分大小寫可以使用binary關(guān)鍵字
#下面例子則匹配jet 1000 或者 jet a000等
... where name regexp binary 'jet .000';
進行OR匹配
正則表達式利用
|來表示or操作
#匹配名字中包括小明或小李的
... where name regexp '小明|小李';
匹配幾個字符之一
使用
[]包裹的字符,表示匹配其中之一
#正則匹配包括1或2或3的學(xué)號
... where id regexp '[123]';
解釋:
[123]是[1|2|3]的縮寫,其實[]就是正則中另一種形式的or語句,為什么加[]是因為如下:

字符集合也可以被否定,即匹配除指定字符之外的任何東西,即
[^123]匹配除123這三個字符之外的任何東西。
正則匹配范圍
#例如
[0-9]
[a-z]
[1-3]
[a-e]
#將會匹配到1 Ton anvil 或 .5 ton anvil等
... where name regexp '[1-5] Ton';
正則匹配特殊字符\\轉(zhuǎn)義
如果需要轉(zhuǎn)義
\本身,需要使用\\\
為什么正則表達式用兩個\\呢?因為在mysql當(dāng)中,mysql自己解釋一個,正則表達式庫解釋一個。
正則匹配字符類

正則匹配多個實例


正則定位符

例如我們想搜索一個以
.點號或者數(shù)字開頭的結(jié)果,怎么辦?
[0-9\.]是不行的,因為他會在文本的任意位置開始查找,解決辦法就是使用定位符^從文本開始位置查找。
... where name regexp '^[0-9\\.]';
創(chuàng)建計算字段
簡單來說,數(shù)據(jù)庫中存儲的結(jié)果不是我們最終想要的,例如省市區(qū)分別存儲在3列中,我們需要連在一列顯示。
拼接字段Concat()函數(shù)
#將first_name、 ( 、last_name、和)這四個字符串拼接起來,例如: 李 (小明)
select Concat(first_name, ' (' , last_name, ')') as name from student;
Trim()、LTrim() 、RTrim()函數(shù)
分別為去掉左右兩邊的空格、去掉左邊空格、去掉右邊空格
如何測試計算?

#例如查詢當(dāng)前時間
select now();
