mysql基礎(chǔ)

1.SELECT語句的語法:

SELECT

column_1,column_2,...

FROM table_1?

[INNER|LEFT|RIGHT] JOIN table_2 ON conditions

WHERE conditions?

GROUPBY column_1

HAVING group_conditions

ORDERBY column_1

LIMIT offset,length;

SQL

SELECT語句由以下列表中所述的幾個子句組成:

SELECT之后是逗號分隔列或星號(*)的列表,表示要返回所有列迂尝。

FROM指定要查詢數(shù)據(jù)的表或視圖脱茉。

JOIN根據(jù)某些連接條件從其他表中獲取數(shù)據(jù)。

WHERE過濾結(jié)果集中的行垄开。

GROUP BY將一組行組合成小分組琴许,并對每個小分組應(yīng)用聚合函數(shù)。

HAVING過濾器基于GROUP BY子句定義的小分組溉躲。

ORDER BY指定用于排序的列的列表榜田。

LIMIT限制返回行的數(shù)量。

語句中的SELECT和FROM語句是必須的锻梳,其他部分是可選的箭券。

2.在SELECT語句中使用LIMIT子句來約束結(jié)果集中的行數(shù)。LIMIT子句接受一個或兩個參數(shù)疑枯。兩個參數(shù)的值必須為零或正整數(shù)辩块。

下面說明了兩個參數(shù)的LIMIT子句語法:

SELECT column1,column2,...

FROM table

LIMIT offset,count;

SQL

我們來查看LIMIT子句參數(shù):

offset參數(shù)指定要返回的第一行的偏移量。第一行的偏移量為0荆永,而不是1废亭。

count指定要返回的最大行數(shù)。

LIMIT子句經(jīng)常與ORDER BY子句一起使用具钥。首先豆村,使用ORDER BY子句根據(jù)特定條件對結(jié)果集進(jìn)行排序,然后使用LIMIT子句來查找最小或最大值骂删。

注意:ORDER BY子句按指定字段排序的使用掌动。

使用MySQL LIMIT獲得第n個最高值

首先,按照降序對結(jié)果集進(jìn)行排序桃漾。

第二步坏匪,使用LIMIT子句獲得第n貴的產(chǎn)品。

SELECT column1,column2,...

FROM table?

ORDERBY column1 DESC

LIMIT nth-1,count;

當(dāng)使用BETWEEN運算符與日期類型值時撬统,要獲得最佳結(jié)果适滓,應(yīng)該使用類型轉(zhuǎn)換將列或表達(dá)式的類型顯式轉(zhuǎn)換為DATE類型

例如恋追,要查詢獲取所需日期(requiredDate)從2013-01-01到2013-01-31的所有訂單凭迹,請使用以下查詢:

SELECT

orderNumber,requiredDate,status

FROM orders?

WHERE requireddate

BETWEEN CAST('2013-01-01'ASDATE)

AND CAST('2013-01-31'ASDATE);

MySQL提供兩個通配符罚屋,用于與LIKE運算符一起使用,它們分別是:百分比符號 -%和下劃線 -_嗅绸。

百分比(%)通配符允許匹配任何字符串的零個或多個字符脾猛。

下劃線(_)通配符允許匹配任何單個字符

有時想要匹配的模式包含通配符,例如10%鱼鸠,_20等這樣的字符串時猛拴。在這種情況下,您可以使用ESCAPE子句指定轉(zhuǎn)義字符蚀狰,以便MySQL將通配符解釋為文字字符愉昆。如果未明確指定轉(zhuǎn)義字符,則反斜杠字符\是默認(rèn)轉(zhuǎn)義字符麻蹋。

UPDATE[LOW_PRIORITY][IGNORE]table_nameSETcolumn_name1=expr1,column_name2=expr2,...WHEREcondition;

SQL

在上面UPDATE語句中:

首先跛溉,在UPDATE關(guān)鍵字后面指定要更新數(shù)據(jù)的表名。

其次扮授,SET子句指定要修改的列和新值芳室。要更新多個列,請使用以逗號分隔的列表刹勃。以字面值堪侯,表達(dá)式或子查詢的形式在每列的賦值中來提供要設(shè)置的值。

第三深夯,使用WHERE子句中的條件指定要更新的行抖格。WHERE子句是可選的。 如果省略WHERE子句咕晋,則UPDATE語句將更新表中的所有行。

請注意收奔,WHERE子句非常重要掌呜,所以不應(yīng)該忘記指定更新的條件。 有時坪哄,您可能只想改變一行; 但是质蕉,可能會忘記寫上WHERE子句,導(dǎo)致意外更新表中的所有行翩肌。

MySQL在UPDATE語句中支持兩個修飾符模暗。

LOW_PRIORITY修飾符指示UPDATE語句延遲更新,直到?jīng)]有從表中讀取數(shù)據(jù)的連接念祭。LOW_PRIORITY對僅使用表級定的存儲引擎(例如MyISAM兑宇,MERGEMEMORY)生效粱坤。

即使發(fā)生錯誤隶糕,IGNORE修飾符也可以使UPDATE語句繼續(xù)更新行瓷产。導(dǎo)致錯誤(如重復(fù)鍵沖突)的行不會更新。

1枚驻、主鍵:

若某一個屬性組(注意是組)能唯一標(biāo)識一條記錄濒旦,該屬性組就是一個主鍵。主鍵不能重復(fù)再登,且只能有一個尔邓,也不允許為空。定義主鍵主要是為了維護(hù)關(guān)系數(shù)據(jù)庫的完整性锉矢。

2梯嗽、外鍵:

外鍵用于與另一張表的關(guān)聯(lián),是能確定另一張表記錄的字段沈撞。外鍵是另一個表的主鍵慷荔,可以重復(fù),可以有多個缠俺,也可以是空值显晶。定義外鍵主要是為了保持?jǐn)?shù)據(jù)的一致性。

3壹士、索引:

索引是對表中一個或多個列的值進(jìn)行排序的結(jié)構(gòu)磷雇。

1)?應(yīng)該創(chuàng)建索引的列的特點:

① 在經(jīng)常需要搜索的列上創(chuàng)建索引,可以加快搜索的速度躏救;

② 在作為主鍵的列上創(chuàng)建索引唯笙,強制該列的唯一性;

③ 在經(jīng)常用在連接的列上創(chuàng)建索引盒使,主要是一些外鍵崩掘,可以加快連接的速度;

④ 在經(jīng)常需要根據(jù)范圍進(jìn)行搜索的列上創(chuàng)建索引少办,因為索引已經(jīng)排序苞慢,其指定的范圍是連續(xù)的;在經(jīng)常需要排序的列上創(chuàng)建索引英妓,因為索引已經(jīng)排序挽放,可以利用索引的排序加快查詢;

⑤ 在經(jīng)常使用在WHERE子句中的列上創(chuàng)建索引蔓纠,加快條件的判斷速度辑畦。

2)?不應(yīng)該創(chuàng)建索引的列的特點:

① 在查詢中很少使用的列上不應(yīng)該創(chuàng)建索引,因為這些列很少使用到腿倚,因此有索引或無索引纯出,并不能提高查詢速度,相反由于增加了索引,反而降低了系統(tǒng)維護(hù)速度潦刃,增大了空間需求侮措;

② 在只有很少數(shù)據(jù)值的列上不應(yīng)該創(chuàng)建索引,很少數(shù)據(jù)值的列如性別等乖杠,在查詢的結(jié)果中分扎,結(jié)果集的數(shù)據(jù)行占了表中數(shù)據(jù)行的很大比例,即需要在表中搜索的數(shù)據(jù)行的比例很大胧洒,增加索引畏吓,并不能明顯加快檢索速度;

③ 當(dāng)修改性能遠(yuǎn)遠(yuǎn)大于檢索性能時卫漫,不應(yīng)該創(chuàng)建索引菲饼,因為改性能和檢索性能是互相矛盾的,當(dāng)增加索引時列赎,會提高檢索性能宏悦,但會降低修改性能,當(dāng)減少索引時包吝,會提高修改性能饼煞,但會降低檢索性能。因此诗越,當(dāng)修改性能遠(yuǎn)大于檢索性能時砖瞧,不應(yīng)該創(chuàng)建索引。

3)?可以在數(shù)據(jù)庫設(shè)計器中創(chuàng)建三種索引:

① 唯一索引:

不允許其中任何兩行具有相同索引值的索引嚷狞。

② 主鍵索引:

表的某一列或列組合块促,其值唯一標(biāo)識表中的每一行,該列或列組合稱為表的主鍵床未。為表定義主鍵將自動創(chuàng)建主鍵索引竭翠,主鍵索引是唯一索引的特定類型。該索引要求主鍵中的每個值都唯一薇搁。

③ 聚集索引:

聚集索引:聚集索引表示表中存儲的數(shù)據(jù)按照索引的順序存儲逃片。由于聚集索引規(guī)定數(shù)據(jù)在表中的物理存儲順序,因此一個表只能包含一個聚集索引只酥。

聚集索引實例:字典默認(rèn)按字母順序排序,如知道某個字的讀音可根據(jù)字母順序快速定位呀狼。

非聚集索引:非聚集索引表示數(shù)據(jù)存儲在一個地方裂允,索引存儲在另一個地方,索引帶有指針指向數(shù)據(jù)的存儲位置哥艇,需要查詢兩個地方才能查找到數(shù)據(jù)绝编。一個表可以包含多個非聚集索引,可以為查找數(shù)據(jù)時常用的每個列創(chuàng)建一個非聚集索引。

非聚集索引實例:如需查詢某個生僻字十饥,則需按字典前面的索引窟勃,如按偏旁進(jìn)行定位,找到該字對應(yīng)的頁數(shù)逗堵,再打開對應(yīng)頁數(shù)找到該字秉氧。

與非聚集索引相比,聚集索引通常提供更快的數(shù)據(jù)訪問速度蜒秤,但對數(shù)據(jù)更新影響較大汁咏。

4)索引的優(yōu)點:

加快對數(shù)據(jù)的檢索。

5)索引的缺點:

①減慢數(shù)據(jù)錄入的速度作媚;

②增加了數(shù)據(jù)庫的尺寸大小攘滩。

4、主鍵和外鍵的關(guān)系:

外鍵是另一個表的主鍵纸泡,主鍵是可以被外鍵有效引用的對象漂问。若A表中的一個字段,是B表的主鍵女揭,則它可以是A表的外鍵蚤假。

5、主鍵和外鍵以及索引的區(qū)別:

定義作用個數(shù)

主鍵唯一標(biāo)識一條記錄田绑,不能有重復(fù)勤哗,不允許為空保證數(shù)據(jù)完整性只能有一個主鍵

外鍵另一表的主鍵,可以重復(fù)掩驱,允許為空和其他表建立聯(lián)系可以有多個外鍵

索引沒有重復(fù)值芒划,但可以有一個空值提高查詢排序的速度可以有多個唯一索引

mysql索引原理:

索引的目的在于提高查詢效率;

磁盤讀取數(shù)據(jù)靠的是機(jī)械運動欧穴,每次讀取數(shù)據(jù)花費的時間可以分為尋道時間民逼、旋轉(zhuǎn)延遲、傳輸時間三個部分涮帘。那么訪問一次磁盤的時間拼苍,即一次磁盤IO的時間約等于5+4.17 = 9ms左右〉饔В考慮到磁盤IO是非常高昂的操作疮鲫,計算機(jī)操作系統(tǒng)做了一些優(yōu)化,當(dāng)一次IO時弦叶,不光把當(dāng)前磁盤地址的數(shù)據(jù)俊犯,而是把相鄰的數(shù)據(jù)也都讀取到內(nèi)存緩沖區(qū)內(nèi),因為局部預(yù)讀性原理告訴我們伤哺,當(dāng)計算機(jī)訪問一個地址的數(shù)據(jù)的時候燕侠,與其相鄰的數(shù)據(jù)也會很快被訪問到者祖。每一次IO讀取的數(shù)據(jù)我們稱之為一頁(page)。具體一頁有多大數(shù)據(jù)跟操作系統(tǒng)有關(guān)绢彤,一般為4k或8k七问,也就是我們讀取一頁內(nèi)的數(shù)據(jù)時候,實際上才發(fā)生了一次IO茫舶,這個理論對于索引的數(shù)據(jù)結(jié)構(gòu)設(shè)計非常有幫助械巡。

建索引的幾大原則

1.最左前綴匹配原則,非常重要的原則奇适,mysql會一直向右匹配直到遇到范圍查詢(>坟比、<、between嚷往、like)就停止匹配葛账,比如a = 1 and b = 2 and c > 3 and d = 4 如果建立(a,b,c,d)順序的索引,d是用不到索引的皮仁,如果建立(a,b,d,c)的索引則都可以用到籍琳,a,b,d的順序可以任意調(diào)整。

2.=和in可以亂序贷祈,比如a = 1 and b = 2 and c = 3 建立(a,b,c)索引可以任意順序趋急,mysql的查詢優(yōu)化器會幫你優(yōu)化成索引可以識別的形式

3.盡量選擇區(qū)分度高的列作為索引,區(qū)分度的公式是count(distinct col)/count(*),表示字段不重復(fù)的比例势誊,比例越大我們掃描的記錄數(shù)越少呜达,唯一鍵的區(qū)分度是1,而一些狀態(tài)粟耻、性別字段可能在大數(shù)據(jù)面前區(qū)分度就是0查近,那可能有人會問,這個比例有什么經(jīng)驗值嗎挤忙?使用場景不同霜威,這個值也很難確定,一般需要join的字段我們都要求是0.1以上册烈,即平均1條掃描10條記錄

4.索引列不能參與計算戈泼,保持列“干凈”,比如from_unixtime(create_time) = ’2014-05-29’就不能使用到索引赏僧,原因很簡單大猛,b+樹中存的都是數(shù)據(jù)表中的字段值,但進(jìn)行檢索時淀零,需要把所有元素都應(yīng)用函數(shù)才能比較胎署,顯然成本太大。所以語句應(yīng)該寫成create_time = unix_timestamp(’2014-05-29’);

5.盡量的擴(kuò)展索引窑滞,不要新建索引。比如表中已經(jīng)有a的索引剩辟,現(xiàn)在要加(a,b)的索引扩然,那么只需要修改原來的索引即可

視圖

什么是視圖:視圖就是一條SELECT語句執(zhí)行后返回的結(jié)果集垮抗。所以我們在創(chuàng)建視圖的時候藻懒,主要的工作就落在創(chuàng)建這條SQL查詢語句上培漏。

視圖的特性:視圖是對若干張基本表的引用患久,一張?zhí)摫砜裕樵冋Z句執(zhí)行的結(jié)果施籍,不存儲具體的數(shù)據(jù)(基本表數(shù)據(jù)發(fā)生了改變共啃,視圖也會跟著改變)占调;

可以跟基本表一樣,進(jìn)行增刪改查操作(ps:增刪改操作有條件限制)移剪;

視圖的作用:方便操作究珊,特別是查詢操作,減少復(fù)雜的SQL語句纵苛,增強可讀性剿涮;

更加安全,數(shù)據(jù)庫授權(quán)命令不能限定到特定行和特定列攻人,但是通過合理創(chuàng)建視圖取试,可以把權(quán)限限定到行列級別;

使用場合:權(quán)限控制的時候怀吻,不希望用戶訪問表中某些含敏感信息的列瞬浓,比如salary...

關(guān)鍵信息來源于多個復(fù)雜關(guān)聯(lián)表,可以創(chuàng)建視圖提取我們需要的信息蓬坡,簡化操作猿棉;

視圖實例1-創(chuàng)建視圖及查詢數(shù)據(jù)操作

視圖實例2-增刪改數(shù)據(jù)操作

其它

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市渣窜,隨后出現(xiàn)的幾起案子铺根,更是在濱河造成了極大的恐慌,老刑警劉巖乔宿,帶你破解...
    沈念sama閱讀 217,826評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件位迂,死亡現(xiàn)場離奇詭異,居然都是意外死亡详瑞,警方通過查閱死者的電腦和手機(jī)掂林,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,968評論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來坝橡,“玉大人泻帮,你說我怎么就攤上這事〖瓶埽” “怎么了锣杂?”我有些...
    開封第一講書人閱讀 164,234評論 0 354
  • 文/不壞的土叔 我叫張陵脂倦,是天一觀的道長。 經(jīng)常有香客問我元莫,道長赖阻,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,562評論 1 293
  • 正文 為了忘掉前任踱蠢,我火速辦了婚禮火欧,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘茎截。我一直安慰自己苇侵,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,611評論 6 392
  • 文/花漫 我一把揭開白布企锌。 她就那樣靜靜地躺著榆浓,像睡著了一般。 火紅的嫁衣襯著肌膚如雪霎俩。 梳的紋絲不亂的頭發(fā)上哀军,一...
    開封第一講書人閱讀 51,482評論 1 302
  • 那天,我揣著相機(jī)與錄音打却,去河邊找鬼杉适。 笑死,一個胖子當(dāng)著我的面吹牛柳击,可吹牛的內(nèi)容都是我干的猿推。 我是一名探鬼主播,決...
    沈念sama閱讀 40,271評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼捌肴,長吁一口氣:“原來是場噩夢啊……” “哼蹬叭!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起状知,我...
    開封第一講書人閱讀 39,166評論 0 276
  • 序言:老撾萬榮一對情侶失蹤秽五,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后饥悴,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體坦喘,經(jīng)...
    沈念sama閱讀 45,608評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,814評論 3 336
  • 正文 我和宋清朗相戀三年西设,在試婚紗的時候發(fā)現(xiàn)自己被綠了瓣铣。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,926評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡贷揽,死狀恐怖棠笑,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情禽绪,我是刑警寧澤蓖救,帶...
    沈念sama閱讀 35,644評論 5 346
  • 正文 年R本政府宣布洪规,位于F島的核電站,受9級特大地震影響藻糖,放射性物質(zhì)發(fā)生泄漏淹冰。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,249評論 3 329
  • 文/蒙蒙 一巨柒、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧柠衍,春花似錦洋满、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,866評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至阵漏,卻和暖如春驻民,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背履怯。 一陣腳步聲響...
    開封第一講書人閱讀 32,991評論 1 269
  • 我被黑心中介騙來泰國打工回还, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人叹洲。 一個月前我還...
    沈念sama閱讀 48,063評論 3 370
  • 正文 我出身青樓柠硕,卻偏偏與公主長得像,于是被迫代替她去往敵國和親运提。 傳聞我的和親對象是個殘疾皇子蝗柔,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,871評論 2 354

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

  • 數(shù)據(jù)庫基礎(chǔ)知識 數(shù)據(jù)庫客戶端MySQL作為數(shù)據(jù)庫服務(wù)器來運行,任何滿足mysql通信規(guī)范的軟件都可以作為客戶端來連...
    littlexjing閱讀 906評論 0 2
  • 數(shù)據(jù)庫簡介關(guān)系型數(shù)據(jù)庫MySQL安裝和使用SQL語言 一民泵、數(shù)據(jù)庫簡介 (一)數(shù)據(jù)庫的發(fā)展 文件系統(tǒng):磁盤文件存儲數(shù)...
    哈嘍別樣閱讀 439評論 0 1
  • 啟動 mysql$ mysql -uroot -p -P3306 -h127.0.0.1-u ,--user=na...
    假裝正在輸入閱讀 714評論 0 6
  • 斜看銀杏葉枯黃 豎聽湖綠水成行 他年笑談今日事 銘否身影留清香?
    我就是林夕閱讀 266評論 0 0
  • 祈愿通過學(xué)習(xí)和實踐金剛智慧癣丧,實現(xiàn)自我成長,妥善處理家庭關(guān)系栈妆,社會關(guān)系胁编,成為智慧的榜樣,并且通過幫助更多的人讓世界變...
    瑩火蟲兒閱讀 117評論 0 1