MySQL 從入門到精通 部分筆記

暫時(shí)還沒看

講解的很透徹

  • mysql語句中----刪除表數(shù)據(jù)drop恼布、truncate和delete的用法
    程度從強(qiáng)到弱
    1尿招、drop table tb
    drop將表格直接刪除杭攻,沒有辦法找回
    2、truncate (table) tb
    刪除表中的所有數(shù)據(jù),不能與where一起使用
    3医增、delete from tb (where)
    刪除表中的數(shù)據(jù)(可制定某一行)
    區(qū)別:truncate和delete的區(qū)別
    1谆构、事務(wù):truncate是不可以rollback的,但是delete是可以rollback的铡买;
    原因:truncate刪除整表數(shù)據(jù)(ddl語句,隱式提交)更鲁,delete是一行一行的刪除,可以rollback
    2奇钞、效果:truncate刪除后將重新水平線和索引(id從零開始) ,delete不會(huì)刪除索引
    3澡为、 truncate 不能觸發(fā)任何Delete觸發(fā)器。
    4景埃、delete 刪除可以返回行數(shù)
  • 執(zhí)行sql腳本文件

  • 方法一 使用cmd命令執(zhí)行(windows下媒至,unix或linux在的其控制臺(tái)下)
    【Mysql的bin目錄】\mysql –u用戶名 –p密碼 –D數(shù)據(jù)庫<【sql腳本文件路徑全名】,示例:
    D:\mysql\bin\mysql –uroot –p123456 -Dtest<d:\test\ss.sql

    注意:
    A谷徙、如果在sql腳本文件中使用了use 數(shù)據(jù)庫拒啰,則-D數(shù)據(jù)庫選項(xiàng)可以忽略
    B、如果【Mysql的bin目錄】中包含空格完慧,則需要使用“”包含谋旦,如:“C:\Program Files\mysql\bin\mysql” –u用戶名 –p密碼 –D數(shù)據(jù)庫<【sql腳本文件路徑全名】

  • 方法二 進(jìn)入mysql的控制臺(tái)后,使用source命令執(zhí)行
    Mysql>source 【sql腳本文件的路徑全名

事物

InnoDb 事物: begin和commit之間的操作
begin: 事物的開始
commit: 事物提交
rollback: 當(dāng)begin之后 , 還沒有commit , rollback 會(huì)返回begin之前的狀態(tài).

事件中斷, 當(dāng)begin之后還沒來得及commit, 就退出了MySQL環(huán)境, 會(huì)自動(dòng)回到begin之前的操作, begin之后的操作被拋棄

  • 一致性, select 只會(huì)返回最近一次事件的結(jié)果. 即使當(dāng)前有事件發(fā)生, 也不會(huì)干擾到 select的結(jié)果(除非是在打開的事物內(nèi)進(jìn)行select);
  • 更新讀鎖 select * from 表名 for update
    保證拿到最新事物的結(jié)果, 如果前面有沒有執(zhí)行完的事物, 會(huì)等到前面事物執(zhí)行結(jié)束之后才會(huì)返回查詢結(jié)果(保證結(jié)果最新), 針對(duì)某一個(gè)屬性;

  • 共享的讀鎖lock in share mode

  • 跟新鎖和共享鎖的區(qū)別.
    更新鎖

    SELECT ... FOR UPDATE sets an exclusive lock on the rows read. An exclusive lock prevents other sessions from accessing the rows for reading or writing.

    在讀取行上設(shè)置一個(gè)排他鎖骗随。阻止其他session讀取或者寫入行數(shù)據(jù)頂

共享鎖
 >SELECT ... LOCK IN SHARE MODE sets a shared mode lock on the rows read. A shared mode lock enables other sessions to read the rows but not to modify them. The rows read are the latest available, so if they belong to another transaction that has not yet committed, the read blocks until that transaction ends. 

在讀取的行上設(shè)置一個(gè)共享模式的鎖蛤织。這個(gè)共享鎖允許其它session讀取數(shù)據(jù)但不允許修改它。 行讀取的是最新的數(shù)據(jù)鸿染,如果他被其它事務(wù)使用中而沒有提交指蚜,讀取鎖將被阻塞直到那個(gè)事務(wù)結(jié)束。 

其他示例:
- [深入理解SELECT ... LOCK IN SHARE MODE和SELECT ... FOR UPDATE](http://blog.csdn.net/cug_jiang126com/article/details/50544728)
- [mysql共享鎖與排他鎖](http://www.cnblogs.com/boblogsbo/p/5602122.html)

MySQL 從入門到精通


  • 建表 CREATE TABLE sales_rep
mysql> CREATE TABLE sales_rep(
    -> employee_number INT,
    -> surname VARCHAR(40),
    -> first_name VARCHAR(30),
    -> commission tinyint(1)// 一般 TINYINT(1) 當(dāng) bool 值用
    -> );
Query OK, 0 rows affected (0.02 sec)

  • 給表填入數(shù)據(jù) , 填入下面的值 (1,'Rive','Sol',10), (2,'Gordimer','Charlene',15), (3,'Serote','Mike',10);
mysql> INSERT INTO sales_rep(employee_number,surname,first_name,commission) VALUES
    -> (1,'Rive','Sol',10),
    -> (2,'Gordimer','Charlene',15),
    -> (3,'Serote','Mike',10);
Query OK, 3 rows affected (0.00 sec)
Records: 3  Duplicates: 0  Warnings: 0
  • TYPE=MyISAM 現(xiàn)在改為了 ENGINE=MyISAM
  • 關(guān)于規(guī)則表達(dá)式
    mysql> SELECT 'ian' REGEXP 'iai*n';
    +----------------------+
    | 'ian' REGEXP 'iai*n' |
    +----------------------+
    |                    1 |
    +----------------------+
    1 row in set (0.00 sec)
    
    用 iain 匹配 ian
    這里可以把 (i
    ) 看做一個(gè)整體, * 表示前面的字符可以出現(xiàn)零次或者多次. 所有i可以出現(xiàn)零次
    那么 iai*n 可以為 ian, 所有可以匹配ian
  • 執(zhí)行sql腳本文件

  • 方法一 使用cmd命令執(zhí)行(windows下涨椒,unix或linux在的其控制臺(tái)下)
    【Mysql的bin目錄】\mysql –u用戶名 –p密碼 –D數(shù)據(jù)庫<【sql腳本文件路徑全名】摊鸡,示例:
    D:\mysql\bin\mysql –uroot –p123456 -Dtest<d:\test\ss.sql
    注意:
    A、如果在sql腳本文件中使用了use 數(shù)據(jù)庫蚕冬,則-D數(shù)據(jù)庫選項(xiàng)可以忽略
    B免猾、如果【Mysql的bin目錄】中包含空格,則需要使用“”包含囤热,如:“C:\Program Files\mysql\bin\mysql” –u用戶名 –p密碼 –D數(shù)據(jù)庫<【sql腳本文件路徑全名】

  • 方法二 進(jìn)入mysql的控制臺(tái)后猎提,使用source命令執(zhí)行
    Mysql>source 【sql腳本文件的路徑全名】

感覺 SHOW ENGINE INNODB STATUS; 這個(gè)命令很強(qiáng)大啊

回滾 rallback
提交 commit

索引

  • 索引類型: 主鍵,唯一索引,全文索引

  • 主鍵: 值唯一,沒有值為NULL德域的索引
    創(chuàng)建帶有主鍵的表:

    CREATE TABLE 表名(fieldname columtype NOT NULL,
    [fieldname2...] PRIMARY KEY(fieldname [,fieldname2...]));
    

    給已經(jīng)存在的表添加主鍵:

    ALTER TABLE tablename ADD PRIMARY KEY(fieldname1 [,fieldname2...]);
    
  • 創(chuàng)建普通索引

    • 創(chuàng)建表的時(shí)候,同時(shí)創(chuàng)建索引
    CREATE TABLE tablename(fieldname columntype, fieldname2 columntype, INDEX [indexname] (fieldname1 [,fieldname2...]));
    
    • 創(chuàng)建表的時(shí)候, 同時(shí)創(chuàng)建多個(gè)索引
    CREATE TABLE tablename(fieldname columntype,fieldname2 columntype, INDEX [indexname1](fie_name1,fieldname2), INDEX[indexname2] (fieldname1 [,fieldname2]));
    
    • 在創(chuàng)建表之后再創(chuàng)建索引:
       // 或者
       CREATE INDEX indexnamw on tablename(fieldname1 [,fieldname2...]);
    
    
  • 創(chuàng)建全文索引, 針對(duì)任意的 CHAR, VARCHAR TEXT 類型的域,其他類型都不能創(chuàng)建全文索引

    CREATE TABLE tablename (fieldname columntype, fieldname2 columntype, FULLTEXT(fieldname [,fieldname2...]));
    // 或者可以加上 INDEX 
    CREATE TABLE tablename (fieldname columntype, fieldname2 columntype, FULLTEXT INDEX(fieldname [,fieldname2...]));
    
    • 在一個(gè)已經(jīng)存在的表中創(chuàng)建全文索引
    ALTER TABLE ft ADD FULLTEXT (f1,f2);
    

    使用全文索引 FULLTEXT()

    • 使用 MATCH(域名) AGAINST(具體值) 來返回檢索結(jié)果
      SELECT * FROM ft2 WHERE MATCH(f1) AGAINST('Master');
  • 噪音單詞: 某些常見的單詞在查詢的時(shí)候會(huì)被忽略

    • MySQL 有一個(gè)百分之五十的門限的東西, 任何在百分之五十以上的域出現(xiàn)的單詞就會(huì)被認(rèn)為是噪音單詞, 會(huì)被查詢忽略.
    • 一個(gè)單詞少于三個(gè)字符會(huì)被忽略
    • 存在一個(gè)預(yù)定義的噪音單詞列表, 包括the
  • 相關(guān)性:
    f1 的相關(guān)性

    SELECT f1, (MATCH(f1) AGAINST ('Master')) From ft2
    
    +-----------------------------+-------------------------------+
    | f1                          | (match(f1) against('Master')) |
    +-----------------------------+-------------------------------+
    | Wating for the Barbarians   |                             0 |
    | In the Heart of the Country |                             0 |
    | The Master of Petersburg    |            0.4266865849494934 |
    | Writing and being           |                             0 |
    | Heart of the Beast          |                             0 |
    | Heart of the Beest          |                             0 |
    | The Beginning and the End   |                             0 |
    | Master Master               |            0.8533731698989868 |
    | A Barbarian at my Door      |                             0 |
    +-----------------------------+-------------------------------+
    9 rows in set (0.00 sec)
    
查 `f1` 中 值`Master` 的相關(guān)性
```
SELECT f1,(MATCH(f1) AGAINST('Master')) FROM ft2 WHERE MATCH(f1) AGAINST('Master');

+--------------------------+-------------------------------+
| f1                       | (MATCH(f1) AGAINST('Master')) |
+--------------------------+-------------------------------+
| Master Master            |            0.8533731698989868 |
| The Master of Petersburg |            0.4266865849494934 |
+--------------------------+-------------------------------+
2 rows in set (0.00 sec)
```
  • 布爾全文查找: IN BOOLEAN MODE
    利用全集特征來查找單詞,單詞組合以及單詞的部分

    • 后面的單詞必須出現(xiàn)
    • 后面的單詞不能出現(xiàn)
      < 讓后面的單詞相關(guān)性最小

    讓后面的單詞相關(guān)性最大
    () 在子表達(dá)式中用來分組單詞
    ~ 沒理解
    * 放到單詞的結(jié)尾, 表示0個(gè)或多個(gè)字符
    "" 包含的部分是一個(gè)整體. 是完全匹配

  • 唯一索引:
    不允許自己索引的內(nèi)容有重復(fù).
    創(chuàng)建
    CREATE TABLE tablename (fieldname columntype, fieldname2 columntype, UNIQUE(fieldname[,fieldname2...]))

    在已經(jīng)存在的表上創(chuàng)建:
    ALTER TABLE tablename ADD UNIQUE[indexname](fieldname[,fieldname2...]);

    或者
    CREATE UNIQUE INDEX indexname ON tablename(fieldname[,fieldname2...]);
    如果索引只包含一個(gè)域,那這個(gè)域不能包含重復(fù)值
    如果索引包含多個(gè)域,但單個(gè)域的值是可以重復(fù)的. 組成整個(gè)索引的域的組合是不能重復(fù)的.

  • 創(chuàng)建自動(dòng)增加域
    建表時(shí)同時(shí)創(chuàng)建自動(dòng)增加域
    CREATE TABLE tablename(fieldname INT AUTO_INCREMENT,[fieldname2...]);

    在已經(jīng)存在的表中創(chuàng)建自動(dòng)增加域
    ALTER TABLE tablename MODIFY fieldname columntype AUTO_INCREMENT;

  • 刪除主鍵
    ALTER TABLE tablename DROP INDEX indexname;

  • 刪除索引
    ALTER TABLE tablename DROP INDEX indexname;
    或者
    DROP INDEX indexname ON tablename;

  • 查看所有索引名字
    SHOW KEYS tablename;

  • 高效使用索引
    索引非常少時(shí), 返回結(jié)果非常慢.
    索引太多, 太占內(nèi)存.
  • 如何使用索引
    WHERE 從句中
    SELECT first_name FROM customer WHERE surname>'C';
    select 后面不能觸發(fā)索引 如SELECT first_name 這個(gè)frist_name 就不能觸發(fā)索引

    適當(dāng)域創(chuàng)建適當(dāng)?shù)乃饕? 如int列表中添加索引, 查找 MAX() 和 MIN() 就很快

    當(dāng)索返回的數(shù)據(jù)是索引的一部分, 會(huì)直接觸發(fā)索引

    ORDER BY 從句

    加速鏈接

    可以在通配符下使用, 不過通配符不能匹配首字母

  • 選擇索引

    • 主鍵是最好的索引, 返回的行數(shù)越少越好
    • 枚舉上的索引不是特別有用
    • 使用短索引,
    • 不要?jiǎng)?chuàng)建太多的索引
  • 使用最左邊的前綴
    比如一個(gè)索引的順序是 INDEX(surname,initial,first_name)
    凡是按照索引順序去查找的都能用到索引.
    如:
    //surname, initial,first_name
    select * from customer where surname='Clegg' and initial='X' and first_name='Yvonne';

    //surname, initial;
    select * from customer where surname='Clegg' and initial='X' ;

    //surname
    select * from customer where surname='Clegg';

不是按照從左到右的順序不會(huì)使用索引
如:
    initial,first_name
    select * from customer where initial='X' and first_name='Yvonne';

    first_name
    select * from customer where first_name='Yvonne';

    initial
    select * from customer where initial='X';

    下面的會(huì)部分索引
    surname,first_name
    select * from customer where surname='Clegg' AND first_name='Yvonne'
  • 使用 EXPLAIN 分析MySQL 如何使用索引
    可以使用 EXPLAIN 查看索引的效率和狀態(tài), 然后提高索引效率
  • 在查詢中計(jì)算
    在常數(shù)上進(jìn)行計(jì)算, 不要在索引上計(jì)算
    如: commission 是索引
    索引上計(jì)算: commission+5<20
    常數(shù)上計(jì)算: commission<20-5
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市旁蔼,隨后出現(xiàn)的幾起案子锨苏,更是在濱河造成了極大的恐慌疙教,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,110評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件伞租,死亡現(xiàn)場(chǎng)離奇詭異贞谓,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)葵诈,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,443評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門裸弦,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人作喘,你說我怎么就攤上這事理疙。” “怎么了泞坦?”我有些...
    開封第一講書人閱讀 165,474評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵沪斟,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我暇矫,道長(zhǎng),這世上最難降的妖魔是什么择吊? 我笑而不...
    開封第一講書人閱讀 58,881評(píng)論 1 295
  • 正文 為了忘掉前任李根,我火速辦了婚禮,結(jié)果婚禮上几睛,老公的妹妹穿的比我還像新娘房轿。我一直安慰自己,他們只是感情好所森,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,902評(píng)論 6 392
  • 文/花漫 我一把揭開白布囱持。 她就那樣靜靜地躺著,像睡著了一般焕济。 火紅的嫁衣襯著肌膚如雪纷妆。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,698評(píng)論 1 305
  • 那天晴弃,我揣著相機(jī)與錄音掩幢,去河邊找鬼。 笑死上鞠,一個(gè)胖子當(dāng)著我的面吹牛际邻,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播芍阎,決...
    沈念sama閱讀 40,418評(píng)論 3 419
  • 文/蒼蘭香墨 我猛地睜開眼世曾,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了谴咸?” 一聲冷哼從身側(cè)響起轮听,我...
    開封第一講書人閱讀 39,332評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤骗露,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后蕊程,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體椒袍,經(jīng)...
    沈念sama閱讀 45,796評(píng)論 1 316
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,968評(píng)論 3 337
  • 正文 我和宋清朗相戀三年藻茂,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了驹暑。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,110評(píng)論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡辨赐,死狀恐怖优俘,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情掀序,我是刑警寧澤帆焕,帶...
    沈念sama閱讀 35,792評(píng)論 5 346
  • 正文 年R本政府宣布,位于F島的核電站不恭,受9級(jí)特大地震影響叶雹,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜换吧,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,455評(píng)論 3 331
  • 文/蒙蒙 一折晦、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧沾瓦,春花似錦满着、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,003評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至缕探,卻和暖如春魂莫,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背爹耗。 一陣腳步聲響...
    開封第一講書人閱讀 33,130評(píng)論 1 272
  • 我被黑心中介騙來泰國(guó)打工豁鲤, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人鲸沮。 一個(gè)月前我還...
    沈念sama閱讀 48,348評(píng)論 3 373
  • 正文 我出身青樓琳骡,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親讼溺。 傳聞我的和親對(duì)象是個(gè)殘疾皇子楣号,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,047評(píng)論 2 355

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