學(xué)習(xí)《MySQL必知必會(huì)》筆記一(第1章-9章)

前言


圖為知乎某答主的高分答案朝蜘,私以為很有道理假褪,于是乎奔《MySQL 必知必會(huì)的》而來~

一、基礎(chǔ)知識(shí)
1.了解數(shù)據(jù)庫
數(shù)據(jù)庫(database):保存有組織的數(shù)據(jù)的容器
表(table):某種特定類型數(shù)據(jù)的結(jié)構(gòu)化清單
模式(schema):關(guān)于數(shù)據(jù)庫和表的布局及特性的信息
列(column):表中的一個(gè)字段哪痰。所有表都是由一個(gè)或多個(gè)列組成的
數(shù)據(jù)類型((datatype):所容許的數(shù)據(jù)類型。每個(gè)列表都有相應(yīng)的數(shù)據(jù)類型久妆,它限制該列中存儲(chǔ)的數(shù)據(jù)晌杰。
行(row):表中的一個(gè)記錄
主鍵(primary key):一列(或一組列),其值能夠唯一區(qū)分表中每個(gè)行筷弦。唯一標(biāo)識(shí)表中每行的這個(gè)列稱為主鍵肋演。應(yīng)該總是定義主鍵。
表中的任何列都可以作為主鍵烂琴,只要它滿足以下條件(定義主鍵規(guī)則):
1)任意兩行都不具有相同的主鍵值
2)每個(gè)行都必須具有一個(gè)主鍵值(主鍵列不允許NULL值)
2.DBMS
DBMS可分為兩類:①基于共享文件系統(tǒng)的DBMS ②基于客戶機(jī)-服務(wù)器的DBMS爹殊。
MySQL是一個(gè)客戶機(jī)-服務(wù)器DBMS。
3.選擇數(shù)據(jù)庫
USE關(guān)鍵字奸绷,如下:
輸入U(xiǎn)SE crashcourse
輸出Database changed //表明數(shù)據(jù)庫選擇成功后顯示
4.了解數(shù)據(jù)庫和表
SHOW命令可以顯示數(shù)據(jù)庫梗夸,表,列健盒,用戶绒瘦,權(quán)限等信息
SHOW DATABASES;//返回?cái)?shù)據(jù)庫的一個(gè)列表称簿。
SHOW TABLES;//返回當(dāng)前選擇的數(shù)據(jù)庫內(nèi)可用的列表
SHOW COLUMNS FROM curtomers;//給出指定表名的列信息
SQL語句不區(qū)分大小寫

二、檢索數(shù)據(jù)

  1. SELECT語句
    SELECT prod_name FROM products;//檢索單個(gè)列
    SELECT prod_id, prod_name,prod_price FROM products;//檢索多個(gè)列
    SELECT * FROM proucts惰帽;//檢索所有列
    2.mysql> SELECT DISTINCT vend_id FROM products;//檢索不同的行憨降,DISTINCT關(guān)鍵字必須直接放在列名的前面。
    3.使用LIMIT限制結(jié)果:
    mysql> SELECT prod_name FROM products LIMIT 5;//限制輸出不多于5行
    mysql> SELECT prod_name FROM products LIMIT 5,5;//從行5開始的5行
    =SELECT prod_name FROM products LIMIT 5 OFFSET 5;
    注意索引都是從0開始该酗,所以LIMIT1授药,1是從2行而不是第一行開始
    4.完全限定的表名
    SELECT products.prod_name FROM crashcourse.products;

三、排序檢索數(shù)據(jù)
1.** 排序數(shù)據(jù)**
ORDER BY
SELECT prod_name FROM products ORDER BY prod_name; //排序檢索
SELECT prod_id,prod_price,prod_name FROM products ORDER BY prod_price,prod_name;//按多個(gè)列排序
2.** 指定排序方向**
DESC降序 ** ASC升序**
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;//多個(gè)列降序
3.使用ORDER BY與LIMIT的組合能找出最高或最低值
SELECT prod_price FROM products ORDER BY prod_price DESC LIMIT 1;//獲取最昂貴的價(jià)格

四呜魄、過濾數(shù)據(jù)
1.使用WHERE子句
SELECT prod_name FROM products WHERE prod_price = 2.5;//只返回prod_price值為2.5的行
WHERE子句的位置:應(yīng)該在ORDER BY之前
2.WHERE子句操作符
=悔叽,<>(不等于),!=(不等于), <,<=, >, >=, BETWEEN(在指定的兩個(gè)值之間)
SELECT prod_name,prod_price FROM products WHERE prod_price BETWEEN 3 AND 10;
3.空值檢查
在創(chuàng)建表時(shí),表設(shè)計(jì)人員可以指定其中的列是否可以不包含值爵嗅。在一個(gè)列不包含值時(shí)娇澎,稱其為包含空值NULL。IS NULL子句來檢查具有NULL值的列
輸入SELECT prod_name FROM products WHERE prod_price IS NULL;
輸出Empty set (0.00 sec) //說明價(jià)格必須非空

五睹晒、數(shù)據(jù)過濾
1.組合WHERE子句
MySQL允許給出多個(gè)WHERE子句趟庄,這些子句以兩種方式組合:AND和OR
1.1 AND操作符
SELECT prod_id,prod_price,prod_name FROM products WHERE vend_id=1003 AND prod_price <=10;//兩個(gè)條件都要滿足
1.2 OR操作符
SELECT prod_id,prod_price,prod_name FROM products WHERE vend_id=1003 OR vend_id = 1002;//兩個(gè)條件滿足一個(gè)就可以
1.3計(jì)算次序
SELECT prod_id,prod_price,prod_name FROM products WHERE vend_id=1003 OR vend_id = 1002 AND prod_price>=10;//AND操作符優(yōu)先級(jí)高于OR
所以上面理解為:由供應(yīng)商1002制造的任何價(jià)格為10美元以上的產(chǎn)品,或者由供應(yīng)商1003制造的任何產(chǎn)品伪很,而不管價(jià)格如何
SELECT prod_id,prod_price,prod_name FROM products WHERE (vend_id=1003 OR vend_id = 1002) AND prod_price>=10;//()優(yōu)先級(jí)最高
上面語句理解為:價(jià)格在10美元以上且有由1002或1003制造的所有產(chǎn)品

  1. IN操作符
    IN操作符用來指定條件范圍戚啥,其作用于OR操作符相當(dāng),但更清楚直觀锉试,而且可以包含其他SELECT語句猫十,是的能夠更動(dòng)態(tài)的建立where子句。
    SELECT prod_price,prod_name FROM products WHERE vend_id IN (1001呆盖,1002,1003) ORDER BY prod_name;
    3.** NOT操作符**
    NOT操作符:否定它之后所跟的任何條件拖云。
    SELECT prod_price,prod_name FROM products WHERE vend_id NOT IN(1002,1003,1001) ORDER BY prod_name;

六、通用配符進(jìn)行過濾

  1. LIKE操作符
    通配符(wildcard):用來匹配值的一部分的特殊字符
    搜索模式(searchpattern):由字面值絮短、通配符或兩者組合構(gòu)成的搜索條件(可以區(qū)分大小寫)
    LIKE指示MySQL江兢,后跟的搜索模式利用通配符匹配而不是直接相等匹配進(jìn)行比較
    1.1 百分號(hào)(%)通配符
    %表示任何字符出現(xiàn)任意次數(shù),但不能匹配NULL
    SELECT prod_price,prod_name FROM products WHERE prod_name LIKE'JET%';
    SELECT prod_price,prod_name FROM products WHERE prod_name LIKE'%ANVIL%';
    %代表搜索模式中給定位置的0個(gè)丁频、1個(gè)或者多個(gè)字符杉允。
    1.2下劃線(_)通配符
    下劃線只匹配單個(gè)字符
    2.通配符技巧
    1)不要過度使用通配符
    2)把通配符放在開始處,搜索速度最慢

七席里、用正則表達(dá)式進(jìn)行搜索
正則表達(dá)式是用來匹配文本的特殊的串(字符集合)叔磷。
1.使用mysql正則表達(dá)式
基本字符匹配
SELECT prod_name FROM products WHERE prod_name REGEXP '.000' ORDER BY prod_name;
+--------------+
| prod_name |
+--------------+
| JetPack 1000 |
| JetPack 2000 |
+--------------+
上面語句使用了正則表達(dá)式.000。.是正則表達(dá)式語言中一個(gè)特殊的字符奖磁。他表示匹配任意一個(gè)字符改基,因此,1000和2000都匹配且返回咖为。
正則表達(dá)式匹配不區(qū)分大小寫秕狰,要區(qū)分大小寫可以在REGEXP后面使用BINARY關(guān)鍵字稠腊。
2.進(jìn)行or匹配
SELECT prod_name FROM products WHERE prod_name REGEXP '1000 | 2000';
這里的|是正則表達(dá)式的OR操作符
3.匹配幾個(gè)字符之一
SELECT prod_name FROM products WHERE prod_name REGEXP '[123] Ton' ORDER BY prod_name;
這里的[123]表示匹配1或2或3鸣哀。
4.匹配范圍
SELECT prod_name FROM products WHERE prod_name REGEXP '[1-5] Ton';
這里[1-5]定義了一個(gè)范圍
5.匹配特殊字符
SELECT vend_name FROM vendors WHERE vend_name REGEXP '\.' ORDER BY vend_name;
為了匹配特殊字符架忌,必須用[\為前導(dǎo)]
\-表示-
\.表示.
\\表示
\f表示換頁
\n表示換行
\r表示回車
\t表示制表
\v表示縱向制表
6.匹配字符類


7.匹配多個(gè)實(shí)例

看下面兩個(gè)例子:
SELECT prod_name FROM products WHERE prod_name REGEXP '\([0-9] sticks?\)' ORDER BY prod_name;//結(jié)果如下
+----------------+
| prod_name |
+----------------+
| TNT (1 stick) |
| TNT (5 sticks) |
+----------------+

正則表達(dá)式[\([0-9]sticks?\]需要說明一下。\(匹配(我衬,[0-9]匹配任意數(shù)字(這個(gè)例子中為1和5)叹放,sticks?匹配stick和sticks(s后的?使s可選挠羔,因?yàn)榫觯科ヅ渌懊娴娜魏巫址?次或1次出現(xiàn)),\)匹配破加。
SELECT prod_name FROM products WHERE prod_name REGEXP '[[:digit:]]{4}' ORDER BY prod_name;
+--------------+
| prod_name |
+--------------+
| JetPack 1000 |
| JetPack 2000 |
+--------------+
2 rows in set (0.00 sec)
[[:digit:]]{4}中{4}要求它前面的字符(任意數(shù)字)出現(xiàn)四次俱恶,所以[[:digit:]]{4}表示連在一起的任意4位數(shù)
8.定位符
^ 文本的開始
$ 文本的結(jié)尾
[[:<:]] 詞的開始
[[:>:]] 詞的結(jié)尾
SELECT prod_name FROM products WHERE prod_name REGEXP '^[0-9\.]' ORDER BY prod_name;
^[0-9\.]表示只在.或任意數(shù)字為串中第一個(gè)字符時(shí)才匹配它們。
^的雙重用途
①用在[]里表示否定該集合拌喉,②用來指串的開始處速那。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末俐银,一起剝皮案震驚了整個(gè)濱河市尿背,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌捶惜,老刑警劉巖田藐,帶你破解...
    沈念sama閱讀 221,548評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異吱七,居然都是意外死亡汽久,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,497評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門踊餐,熙熙樓的掌柜王于貴愁眉苦臉地迎上來景醇,“玉大人,你說我怎么就攤上這事吝岭∪担” “怎么了?”我有些...
    開封第一講書人閱讀 167,990評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵窜管,是天一觀的道長散劫。 經(jīng)常有香客問我,道長幕帆,這世上最難降的妖魔是什么获搏? 我笑而不...
    開封第一講書人閱讀 59,618評(píng)論 1 296
  • 正文 為了忘掉前任,我火速辦了婚禮失乾,結(jié)果婚禮上常熙,老公的妹妹穿的比我還像新娘纬乍。我一直安慰自己,他們只是感情好裸卫,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,618評(píng)論 6 397
  • 文/花漫 我一把揭開白布蕾额。 她就那樣靜靜地躺著,像睡著了一般彼城。 火紅的嫁衣襯著肌膚如雪诅蝶。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,246評(píng)論 1 308
  • 那天募壕,我揣著相機(jī)與錄音调炬,去河邊找鬼。 笑死舱馅,一個(gè)胖子當(dāng)著我的面吹牛缰泡,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播代嗤,決...
    沈念sama閱讀 40,819評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼棘钞,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了干毅?” 一聲冷哼從身側(cè)響起宜猜,我...
    開封第一講書人閱讀 39,725評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎硝逢,沒想到半個(gè)月后姨拥,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,268評(píng)論 1 320
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡渠鸽,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,356評(píng)論 3 340
  • 正文 我和宋清朗相戀三年叫乌,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片徽缚。...
    茶點(diǎn)故事閱讀 40,488評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡憨奸,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出凿试,到底是詐尸還是另有隱情排宰,我是刑警寧澤,帶...
    沈念sama閱讀 36,181評(píng)論 5 350
  • 正文 年R本政府宣布红省,位于F島的核電站额各,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏吧恃。R本人自食惡果不足惜虾啦,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,862評(píng)論 3 333
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧傲醉,春花似錦蝇闭、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,331評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至吐咳,卻和暖如春逻悠,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背韭脊。 一陣腳步聲響...
    開封第一講書人閱讀 33,445評(píng)論 1 272
  • 我被黑心中介騙來泰國打工童谒, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人沪羔。 一個(gè)月前我還...
    沈念sama閱讀 48,897評(píng)論 3 376
  • 正文 我出身青樓饥伊,卻偏偏與公主長得像,于是被迫代替她去往敵國和親蔫饰。 傳聞我的和親對(duì)象是個(gè)殘疾皇子琅豆,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,500評(píng)論 2 359

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

  • 1.表中的任何列都可以作為主鍵, 只要它滿足以下條件:任意兩行都不具有相同的主鍵值篓吁;每一行都必須具有一個(gè)主鍵值( ...
    Cherryjs閱讀 667評(píng)論 0 0
  • 數(shù)據(jù)庫入門 數(shù)據(jù)庫: 保存有組織的數(shù)據(jù)的容器(通常是一個(gè)文件或一組文件).數(shù)據(jù)庫軟件應(yīng)該稱為 DBMS(DataB...
    Mjericho閱讀 504評(píng)論 0 0
  • 第七章 數(shù)據(jù)過濾 7.1 組合WHERE子句 在第六章介紹的所有WHERE子句在過濾時(shí)茫因,使用的都是單一的條件。為了...
    saviochen閱讀 427評(píng)論 0 4
  • 第四章 檢索數(shù)據(jù) 4.1 SELECT語句 SELECT語句的用途是從一個(gè)或多個(gè)表中檢索信息越除。為了使用SELECT...
    saviochen閱讀 572評(píng)論 0 4
  • 導(dǎo)語 團(tuán)隊(duì)開發(fā)的時(shí)候我們經(jīng)常要公用一個(gè)證書測試节腐。今天我就講一下證書的配置(已測試證書為例,正式證書幾乎一樣的過程步...
    Zzzzzzzzzzzzzz閱讀 983評(píng)論 0 0