mysql必知必會讀書筆記1

全書共有30章,在通讀完之后深浮。進(jìn)行總結(jié)。

全書可以劃分為1眠冈,2章節(jié)是對MYSQL數(shù)據(jù)庫的介紹飞苇;3章節(jié)是連接數(shù)據(jù)庫;4-18章主要是查詢的各種操作蜗顽,是重點布卡;19章是插入數(shù)據(jù);20章是更新和刪除數(shù)據(jù)雇盖;21章是對表的操作忿等;22章-25章是對視圖,存儲過程崔挖,游標(biāo)贸街,觸發(fā)器的介紹,剩下的章節(jié)是關(guān)于安全性和性能的一些知識狸相。對常用的命令進(jìn)行提取和注意點的總結(jié)薛匪。

對于性能的知識得格外的注意,防止開發(fā)過程中出現(xiàn)慢查詢脓鹃,導(dǎo)致阻塞逸尖。總結(jié)中采用 紅色+傾斜+加粗的字體引起重視。其中娇跟,對于聚集函數(shù)的使用岩齿,應(yīng)該根據(jù)實際項目中開發(fā)所碰到的表的數(shù)據(jù)量來決定是否使用,對于多人操作的量大的表苞俘,還是不要直接對表查詢的時候進(jìn)行一些聚集函數(shù)的操作盹沈,可以將數(shù)據(jù)返回之后,進(jìn)行處理苗胀。


1.MYSQL數(shù)據(jù)庫的介紹

數(shù)據(jù)庫:保存有組織的數(shù)據(jù)的容器(通常是一個文件或者是一組文件)襟诸。

表:?? ??? ?同一數(shù)據(jù)庫,表具有唯一的名字基协。

模?? ?式:關(guān)于數(shù)據(jù)庫和表的布局及特性的信息歌亲。貌似沒有用過,先暫時省略澜驮。陷揪。

主?? ?鍵:并不強(qiáng)求一定有主鍵,但還是最好保證創(chuàng)建的表具有一個主鍵杂穷,便于數(shù)據(jù)的操縱和管理悍缠。

?有幾個好的習(xí)慣:

????1.不更新主鍵列中的值

? ? 2.不重用主鍵列中的值

? ? 3.不在主鍵列中使用可能會更改的值。(例如耐量,如果使用一個名字)

SQL:是一種專門用來與數(shù)據(jù)庫通信的語言飞蚓。

MYSQL工具:

? ?????1.mysql命令行實用程序

brew install mysql

mysql.server start

mysql -h 10.10.0.27 -u XXX -p

? ? ? ?2.mysql Administrator

? ? ? ?3.mysql Query Browser


2.連接數(shù)據(jù)庫

? ? 命令行:

? ? 1.選擇一個數(shù)據(jù)庫

? ? USE database;

?輸出:Database changed

? ? 2.顯示信息——> HELP SHOW;

? ? SHOW DATABASES;

? ?輸出:可用數(shù)據(jù)庫的列表

? ? SHOW TABLES;

? ?輸出:當(dāng)前選擇的數(shù)據(jù)庫內(nèi)可用表的列表

? ? SHOW COLUMNS FROM customers; ?或者 DESCRIBE?customers;

? ?輸出:SHOW COLUMNS要求給出一個表名,它對每個字段返回一行廊蜒,行中包括字段名(Field)趴拧,數(shù)據(jù)類型(Type),是否允許NULL(Null),鍵信息(Key)山叮,默認(rèn)值(Default)以及其他信息(Extra).

? ? SHOW STATUS;

? ?輸出:用于顯示廣泛的服務(wù)器狀態(tài)信息著榴;

? ? SHOW GRANTS;

? ?輸出:用來顯示授予用戶(所有用戶或特定用戶)的安全權(quán)限

? ? SHOW ERRORS和SHOW WARNINGS屁倔;

? ?輸出:用來顯示服務(wù)器錯誤或者警告的信息


3.對數(shù)據(jù)庫的查詢

注意點:

? ? 1.多條SQL語句必須以分號(脑又;)分隔,不需要在單條之后加锐借,但是總是加上總不會錯问麸;mysql的命令行,則必須加上分號來結(jié)尾瞎饲;

? ? 2.SQL語句不區(qū)分不小寫口叙,但為了規(guī)范對SQL的關(guān)鍵字使用大寫,對所有列名和表名使用小寫嗅战;

? ? 3.使用空格:在處理SQL語句時妄田,其中所有空格都被忽略俺亮。可以在一行或者多行給出疟呐。建議分成多行更容易閱讀脚曾。

查詢語句匯集:

1.檢索單個列

?? ?? ? SELECT prod_name FROM products;

注:這條語句將返回表中的所有行,不用的人使用可能返回的數(shù)據(jù)順序不一樣启具,這是一種正常的情況本讥。返回的數(shù)據(jù)沒有特殊的意義,順序可能是數(shù)據(jù)被添加到表中的順序鲁冯,也可能不是拷沸。只要返回相同數(shù)目的行,就是正確的薯演。

2.檢索多個列

SELECT prod_name,prod_id,prod_price FROM products;

3.檢索所有列

?? ?? ? SELECT * FROM?products;

注:除非確定需要所有的列撞芍,一般不建議直接使用通配符,檢索不需要的列會降低檢索和應(yīng)用程序的性能跨扮。

4.檢索不同的行

SELECT DISTINCT vend_id FROM products;

注:不能部分使用DISTINCT序无,DISTINCT關(guān)鍵字應(yīng)用與所有列而不僅僅是前置它的列。如果給出SELECT DISTINCT vend_id,prod_price FROM products衡创,除非指定的所有列都不相同帝嗡,否則所有行都將被檢索出來。

5.限制結(jié)果

SELECT prod_name FROM products LIMIT 5;

注:LIMIT 5,5指示返回從行5開始的5行璃氢。第一個數(shù)字為開始位置哟玷,第二個數(shù)字為要檢索的行數(shù)。在行數(shù)不夠時一也,LIMIT中指定要檢索的行數(shù)為檢索的最大行數(shù)碗降,如果沒有足夠的行(例如LIMIT10,5塘秦;但只有13行),將只返回它能返回的那么多行动看。??

6.使用完全限定的表名

SELECT products.prod_name FROM products;

7.排序順序

SELECT prod_name FROM products ORDER BY prod_name;

?注:按字母順序排列尊剔。

8.按多個列排序

SELECT prod_id,prod_price,prod_name FROM products ORDER BY prod_price,prod_name;

注:在按多個列排序時,排序完全按所規(guī)定的順序進(jìn)行菱皆。也就是僅在多個行具有相同的prod_price值時才對產(chǎn)品按prod_name進(jìn)行排序须误,如果prod_price列中的所有的值都是唯一的,則不會按prod_name排序仇轻。

9.指定排列方向

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只應(yīng)用到直接位于其前面的列京痢。上面,只對prod_price排序篷店,對prod_name不排序祭椰。如果想在多個列上進(jìn)行降序排序臭家,必須對每個列指定DESC關(guān)鍵字。

10.使用WHREE子句

SELECT prod_name,prod_price,FROM products WHERE prod_name = 2.50;

?? ?? ?注:WHRER子句操作符:=方淤,<>,!=,<,<=,>,>=,BETWEEN…AND..

? ?11.空值檢查

SELECT prod_id FROM products WHERE prod_name IS NULL;

注:NULL 與不匹配钉赁,在通過過濾選擇出不具有特定值的行時,你可能希望返回具有NULL值的行携茂。但是你踩,不行。因為未知具有特殊的含義讳苦,數(shù)據(jù)庫不知道他們是不是匹配带膜,所以在匹配過濾或者不匹配過濾時不返回他們。因此鸳谜,在過濾數(shù)據(jù)時膝藕,一定要驗證返回數(shù)據(jù)中確實給出了被過濾行具有NULL的行。

? ?12.AND操作符

SELECT prod_id,prod_price,prod_name FROM products WHERE vend_id = 1003 AND prod_price <= 10;

? ? 13.OR操作符

SELECT prod_name,prod_price FROM products WHERE vend_id = 1002 OR vender_id =1003;

注:AND和OR的計算次序卿堂,由于AND的優(yōu)先級高于OR束莫,所以在碰到a OR b AND c會處理成a ?OR (b AND c),所以解決問題的方法是使用圓括號明確的進(jìn)行分組。

14.IN操作符

SELECT prod_name,prod_price FROM products WHERE vend_id IN (1002,1003) ORDER BY prod_name;

注:上面的IN可以使用OR也生效草描。但是為什么要使用IN览绿?

1.在使用長的合法選項清單時,IN操作符的語句更清楚且更直觀穗慕。

?2.在使用IN時饿敲,計算的次序更容易管理(因為使用的操作符更少)。

3.IN操作符一般比OR操作符的執(zhí)行更快逛绵。

4.IN的最大優(yōu)點是可以包含其他SELECT語句怀各,使得能夠更動態(tài)的建立WHERE語句。

15.NOT操作符

SELECT prod_name,prod_price FROM products WHERE vend_id NOT IN (1002,1003) ORDER BY prod_name;

?注:mysql支持使用NOT對IN术浪,BETWEEN和EXISTS子句取反瓢对。

16.LIKE操作符

%通配符:任何字符出現(xiàn)任意次數(shù)。

SELECT prod_id,prod_name FROM products WHERE prod_name LIKE?‘jet%’;

?注:1.尾空格可能會干擾通配符匹配胰苏。解決這個問題的辦法一是在搜索模式的最后附加一個%硕蛹,另一個辦法是使用函數(shù)去掉首位空格。2.WHERE prod_name LIKE?‘%’不會匹配到NULL值硕并。

?_通配符:單個字符出現(xiàn)任意次數(shù)法焰。

SELECT prod_id,prod_name FROM products WHERE prod_name LIKE?‘_ ton anvil’;

注:與%能匹配0個字符不一樣,_總能匹配一個字符倔毙,不能多也不能少埃仪。

注:通配符搜索的處理一般要花費時間更長。下面是一些技巧:

1.不要過度使用通配符陕赃。如果其他操作符能達(dá)到相同的目的卵蛉,應(yīng)該使用其他操作符颁股。

2.在確實需要使用通配符時,除非絕對有必要毙玻,否則不要把他們用到搜索模式的開始處豌蟋。把通配符置于搜索模式的開始處,搜索起步時最慢的桑滩。

3.仔細(xì)注意通配符的位置梧疲。如果放錯位置,可能你不會返回想要的數(shù)據(jù)运准。

17.正則表達(dá)式

基本字符匹配 :包含XXX的行

SELECT prod_name FROM products WHERE prod_name REGEXP?‘1000’ ORDER BY prod_name;

====================

LIKE 和 REGEXP:在LIKE和REGEXP之間有一個重要的差別幌氮。請看一下兩條語句:

?? ?? ? SELECT prod_name FROM products WHERE prod_name LIKE?‘1000’ ORDER BY prod_name;

?? ?? ? SELECT prod_name FROM products WHERE prod_name REGEXP?‘1000’ ORDER BY prod_name;

?如果執(zhí)行上面兩條語句,會發(fā)現(xiàn)第一條語句不返回數(shù)據(jù)胁澳,而第二條語句返回一行该互。為什么?

LIKE 匹配整個列韭畸,如果被匹配的文本在列值中出現(xiàn)宇智,LIKE將不會找到它,相應(yīng)的行也不被返回(除非使用通配符)胰丁。而REGEXP在列值內(nèi)進(jìn)行匹配随橘,(指的是包含1000的行)如果被匹配的文本在列值中出現(xiàn),REGEXP將會找到它锦庸,相應(yīng)的行將被返回机蔗。這是一個非常重要的區(qū)別。

? 那么,REGEXP能不能用來匹配整個列值(從來起于LIKE相同的作用)甘萧?使用^和定位符即可萝嘁。

OR匹配

SELECT prod_name FROM products WHERE prod_name REGEXP?‘1000|2000’ ORDER BY prod_name;

匹配幾個字符之一

SELECT prod_name FROM products WHERE prod_name REGEXP?‘[123] Tom’ ORDER BY prod_name;

?注:[^123]匹配除這些字符外的任何東西。

?匹配范圍

SELECT prod_name FROM products WHERE prod_name REGEXP?‘[1-5] Tom’ ORDER BY prod_name;

?匹配特殊字符

SELECT vender_name FROM venders WHERE vend_name REGEXP?‘\\.’ ORDER BY vender_name;

?注意:mysql的轉(zhuǎn)義需要兩個反斜杠扬卷,mysql解釋一個牙言,正則表達(dá)式解釋一個。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末怪得,一起剝皮案震驚了整個濱河市嬉挡,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌汇恤,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,185評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件拔恰,死亡現(xiàn)場離奇詭異因谎,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)颜懊,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,652評論 3 393
  • 文/潘曉璐 我一進(jìn)店門财岔,熙熙樓的掌柜王于貴愁眉苦臉地迎上來风皿,“玉大人,你說我怎么就攤上這事匠璧⊥┛睿” “怎么了?”我有些...
    開封第一講書人閱讀 163,524評論 0 353
  • 文/不壞的土叔 我叫張陵夷恍,是天一觀的道長魔眨。 經(jīng)常有香客問我,道長酿雪,這世上最難降的妖魔是什么遏暴? 我笑而不...
    開封第一講書人閱讀 58,339評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮指黎,結(jié)果婚禮上朋凉,老公的妹妹穿的比我還像新娘。我一直安慰自己醋安,他們只是感情好杂彭,可當(dāng)我...
    茶點故事閱讀 67,387評論 6 391
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著吓揪,像睡著了一般亲怠。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上磺芭,一...
    開封第一講書人閱讀 51,287評論 1 301
  • 那天赁炎,我揣著相機(jī)與錄音,去河邊找鬼钾腺。 笑死徙垫,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的放棒。 我是一名探鬼主播姻报,決...
    沈念sama閱讀 40,130評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼间螟!你這毒婦竟也來了吴旋?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,985評論 0 275
  • 序言:老撾萬榮一對情侶失蹤厢破,失蹤者是張志新(化名)和其女友劉穎荣瑟,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體摩泪,經(jīng)...
    沈念sama閱讀 45,420評論 1 313
  • 正文 獨居荒郊野嶺守林人離奇死亡笆焰,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,617評論 3 334
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了见坑。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片嚷掠。...
    茶點故事閱讀 39,779評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡捏检,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出不皆,到底是詐尸還是另有隱情贯城,我是刑警寧澤,帶...
    沈念sama閱讀 35,477評論 5 345
  • 正文 年R本政府宣布霹娄,位于F島的核電站能犯,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏项棠。R本人自食惡果不足惜悲雳,卻給世界環(huán)境...
    茶點故事閱讀 41,088評論 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望香追。 院中可真熱鬧合瓢,春花似錦、人聲如沸透典。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,716評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽峭咒。三九已至税弃,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間凑队,已是汗流浹背则果。 一陣腳步聲響...
    開封第一講書人閱讀 32,857評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留漩氨,地道東北人西壮。 一個月前我還...
    沈念sama閱讀 47,876評論 2 370
  • 正文 我出身青樓,卻偏偏與公主長得像叫惊,于是被迫代替她去往敵國和親款青。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,700評論 2 354

推薦閱讀更多精彩內(nèi)容