MySQL 從入門(mén)到精通 部分筆記

暫時(shí)還沒(méi)看

講解的很透徹

  • mysql語(yǔ)句中----刪除表數(shù)據(jù)drop、truncate和delete的用法
    程度從強(qiáng)到弱
    1、drop table tb
    drop將表格直接刪除,沒(méi)有辦法找回
    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語(yǔ)句,隱式提交),delete是一行一行的刪除,可以rollback
    2、效果:truncate刪除后將重新水平線(xiàn)和索引(id從零開(kāi)始) ,delete不會(huì)刪除索引
    3、 truncate 不能觸發(fā)任何Delete觸發(fā)器。
    4、delete 刪除可以返回行數(shù)
  • 執(zhí)行sql腳本文件

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

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

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

事物

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

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

  • 一致性, select 只會(huì)返回最近一次事件的結(jié)果. 即使當(dāng)前有事件發(fā)生, 也不會(huì)干擾到 select的結(jié)果(除非是在打開(kāi)的事物內(nèi)進(jìn)行select);
  • 更新讀鎖 select * from 表名 for update
    保證拿到最新事物的結(jié)果, 如果前面有沒(méi)有執(zhí)行完的事物, 會(huì)等到前面事物執(zhí)行結(jié)束之后才會(huì)返回查詢(xún)結(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讀取或者寫(xiě)入行數(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ù)使用中而沒(méi)有提交,讀取鎖將被阻塞直到那個(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 從入門(mén)到精通


  • 建表 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用戶(hù)名 –p密碼 –D數(shù)據(jù)庫(kù)<【sql腳本文件路徑全名】,示例:
    D:\mysql\bin\mysql –uroot –p123456 -Dtest<d:\test\ss.sql
    注意:
    A、如果在sql腳本文件中使用了use 數(shù)據(jù)庫(kù),則-D數(shù)據(jù)庫(kù)選項(xiàng)可以忽略
    B、如果【Mysql的bin目錄】中包含空格,則需要使用“”包含,如:“C:\Program Files\mysql\bin\mysql” –u用戶(hù)名 –p密碼 –D數(shù)據(jù)庫(kù)<【sql腳本文件路徑全名】

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

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

回滾 rallback
提交 commit

索引

  • 索引類(lèi)型: 主鍵,唯一索引,全文索引

  • 主鍵: 值唯一,沒(méi)有值為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 類(lèi)型的域,其他類(lèi)型都不能創(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(具體值) 來(lái)返回檢索結(jié)果
      SELECT * FROM ft2 WHERE MATCH(f1) AGAINST('Master');
  • 噪音單詞: 某些常見(jiàn)的單詞在查詢(xún)的時(shí)候會(huì)被忽略

    • MySQL 有一個(gè)百分之五十的門(mén)限的東西, 任何在百分之五十以上的域出現(xiàn)的單詞就會(huì)被認(rèn)為是噪音單詞, 會(huì)被查詢(xún)忽略.
    • 一個(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
    利用全集特征來(lái)查找單詞,單詞組合以及單詞的部分

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

    讓后面的單詞相關(guān)性最大
    () 在子表達(dá)式中用來(lái)分組單詞
    ~ 沒(méi)理解
    * 放到單詞的結(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 從句

    加速鏈接

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

  • 選擇索引

    • 主鍵是最好的索引, 返回的行數(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), 然后提高索引效率
  • 在查詢(xún)中計(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)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀(guān)點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 230,578評(píng)論 6 544
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 99,701評(píng)論 3 429
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人,你說(shuō)我怎么就攤上這事。” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 178,691評(píng)論 0 383
  • 文/不壞的土叔 我叫張陵,是天一觀(guān)的道長(zhǎng)。 經(jīng)常有香客問(wèn)我,道長(zhǎng),這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 63,974評(píng)論 1 318
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 72,694評(píng)論 6 413
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 56,026評(píng)論 1 329
  • 那天,我揣著相機(jī)與錄音,去河邊找鬼。 笑死,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 44,015評(píng)論 3 450
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 43,193評(píng)論 0 290
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 49,719評(píng)論 1 336
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 41,442評(píng)論 3 360
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 43,668評(píng)論 1 374
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 39,151評(píng)論 5 365
  • 正文 年R本政府宣布,位于F島的核電站,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 44,846評(píng)論 3 351
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 35,255評(píng)論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 36,592評(píng)論 1 295
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 52,394評(píng)論 3 400
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 48,635評(píng)論 2 380

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