最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Mysql常見(jiàn)問(wèn)題集錦

 更新時(shí)間:2013年09月23日 11:30:22   作者:  
Mysql在使用過(guò)程中難免會(huì)遇到一些問(wèn)題,在本文把常見(jiàn)問(wèn)題做個(gè)記錄方便以后發(fā)現(xiàn)問(wèn)題查看,感興趣的朋友也可以了解下
1,utf8_bin跟utf8_general_ci的區(qū)別

ci是 case insensitive, 即 "大小寫不敏感", a 和 A 會(huì)在字符判斷中會(huì)被當(dāng)做一樣的;
bin 是二進(jìn)制, a 和 A 會(huì)別區(qū)別對(duì)待.

例如你運(yùn)行:
SELECT * FROM table WHERE txt = 'a'
那么在utf8_bin中你就找不到 txt = 'A' 的那一行, 而 utf8_general_ci 則可以.

2,MyISAM 和 InnoDB

InnoDB和MyISAM是許多人在使用MySQL時(shí)最常用的兩個(gè)表類型,這兩個(gè)表類型各有優(yōu)劣,視具體應(yīng)用而定。基本的差別為:MyISAM類型不支持事務(wù)處理等高級(jí)處理,而InnoDB類型支持。MyISAM類型的表強(qiáng)調(diào)的是性能,其執(zhí)行數(shù)度比InnoDB類型更快,但是不提供事務(wù)支持,而InnoDB提供事務(wù)支持已經(jīng)外部鍵等高級(jí)數(shù)據(jù)庫(kù)功能。

  以下是一些細(xì)節(jié)和具體實(shí)現(xiàn)的差別:

  ◆1.InnoDB不支持FULLTEXT類型的索引。

  ◆2.InnoDB 中不保存表的具體行數(shù),也就是說(shuō),執(zhí)行select count(*) from table時(shí),InnoDB要掃描一遍整個(gè)表來(lái)計(jì)算有多少行,但是MyISAM只要簡(jiǎn)單的讀出保存好的行數(shù)即可。注意的是,當(dāng)count(*)語(yǔ)句包含 where條件時(shí),兩種表的操作是一樣的。

  ◆3.對(duì)于AUTO_INCREMENT類型的字段,InnoDB中必須包含只有該字段的索引,但是在MyISAM表中,可以和其他字段一起建立聯(lián)合索引。

  ◆4.DELETE FROM table時(shí),InnoDB不會(huì)重新建立表,而是一行一行的刪除。

  ◆5.LOAD TABLE FROM MASTER操作對(duì)InnoDB是不起作用的,解決方法是首先把InnoDB表改成MyISAM表,導(dǎo)入數(shù)據(jù)后再改成InnoDB表,但是對(duì)于使用的額外的InnoDB特性(例如外鍵)的表不適用。

  另外,InnoDB表的行鎖也不是絕對(duì)的,假如在執(zhí)行一個(gè)SQL語(yǔ)句時(shí)MySQL不能確定要掃描的范圍,InnoDB表同樣會(huì)鎖全表,例如update table set num=1 where name like “%aaa%”

  兩種類型最主要的差別就是Innodb 支持事務(wù)處理與外鍵和行級(jí)鎖.而MyISAM不支持.所以MyISAM往往就容易被人認(rèn)為只適合在小項(xiàng)目中使用。

  我作為使用MySQL的用戶角度出發(fā),Innodb和MyISAM都是比較喜歡的,但是從我目前運(yùn)維的數(shù)據(jù)庫(kù)平臺(tái)要達(dá)到需求:99.9%的穩(wěn)定性,方便的擴(kuò)展性和高可用性來(lái)說(shuō)的話,MyISAM絕對(duì)是我的首選。

  原因如下:

  1、首先我目前平臺(tái)上承載的大部分項(xiàng)目是讀多寫少的項(xiàng)目,而MyISAM的讀性能是比Innodb強(qiáng)不少的。

  2、MyISAM的索引和數(shù)據(jù)是分開(kāi)的,并且索引是有壓縮的,內(nèi)存使用率就對(duì)應(yīng)提高了不少。能加載更多索引,而Innodb是索引和數(shù)據(jù)是緊密捆綁的,沒(méi)有使用壓縮從而會(huì)造成Innodb比MyISAM體積龐大不小。

  3、從平臺(tái)角度來(lái)說(shuō),經(jīng)常隔1,2個(gè)月就會(huì)發(fā)生應(yīng)用開(kāi)發(fā)人員不小心update一個(gè)表where寫的范圍不對(duì),導(dǎo)致這個(gè)表沒(méi)法正常用了,這個(gè)時(shí)候MyISAM的優(yōu)越性就體現(xiàn)出來(lái)了,隨便從當(dāng)天拷貝的壓縮包取出對(duì)應(yīng)表的文件,隨便放到一個(gè)數(shù)據(jù)庫(kù)目錄下,然后dump成sql再導(dǎo)回到主庫(kù),并把對(duì)應(yīng)的binlog補(bǔ)上。如果是Innodb,恐怕不可能有這么快速度,別和我說(shuō)讓Innodb定期用導(dǎo)出xxx.sql機(jī)制備份,因?yàn)槲移脚_(tái)上最小的一個(gè)數(shù)據(jù)庫(kù)實(shí)例的數(shù)據(jù)量基本都是幾十G大小。

  4、從我接觸的應(yīng)用邏輯來(lái)說(shuō),select count(*) 和order by 是最頻繁的,大概能占了整個(gè)sql總語(yǔ)句的60%以上的操作,而這種操作Innodb其實(shí)也是會(huì)鎖表的,很多人以為Innodb是行級(jí)鎖,那個(gè)只是where對(duì)它主鍵是有效,非主鍵的都會(huì)鎖全表的。

  5、還有就是經(jīng)常有很多應(yīng)用部門需要我給他們定期某些表的數(shù)據(jù),MyISAM的話很方便,只要發(fā)給他們對(duì)應(yīng)那表的frm.MYD,MYI的文件,讓他們自己在對(duì)應(yīng)版本的數(shù)據(jù)庫(kù)啟動(dòng)就行,而Innodb就需要導(dǎo)出xxx.sql了,因?yàn)楣饨o別人文件,受字典數(shù)據(jù)文件的影響,對(duì)方是無(wú)法使用的。

  6、如果和MyISAM比insert寫操作的話,Innodb還達(dá)不到MyISAM的寫性能,如果是針對(duì)基于索引的update操作,雖然MyISAM可能會(huì)遜色I(xiàn)nnodb,但是那么高并發(fā)的寫,從庫(kù)能否追的上也是一個(gè)問(wèn)題,還不如通過(guò)多實(shí)例分庫(kù)分表架構(gòu)來(lái)解決。

  7、如果是用MyISAM的話,merge引擎可以大大加快應(yīng)用部門的開(kāi)發(fā)速度,他們只要對(duì)這個(gè)merge表做一些select count(*)操作,非常適合大項(xiàng)目總量約幾億的rows某一類型(如日志,調(diào)查統(tǒng)計(jì))的業(yè)務(wù)表。

  當(dāng)然Innodb也不是絕對(duì)不用,用事務(wù)的項(xiàng)目如模擬炒股項(xiàng)目,我就是用Innodb的,活躍用戶20多萬(wàn)時(shí)候,也是很輕松應(yīng)付了,因此我個(gè)人也是很喜歡Innodb的,只是如果從數(shù)據(jù)庫(kù)平臺(tái)應(yīng)用出發(fā),我還是會(huì)首選MyISAM。

  另外,可能有人會(huì)說(shuō)你MyISAM無(wú)法抗太多寫操作,但是我可以通過(guò)架構(gòu)來(lái)彌補(bǔ),說(shuō)個(gè)我現(xiàn)有用的數(shù)據(jù)庫(kù)平臺(tái)容量:主從數(shù)據(jù)總量在幾百T以上,每天十多億 pv的動(dòng)態(tài)頁(yè)面,還有幾個(gè)大項(xiàng)目是通過(guò)數(shù)據(jù)接口方式調(diào)用未算進(jìn)pv總數(shù),(其中包括一個(gè)大項(xiàng)目因?yàn)槌跗趍emcached沒(méi)部署,導(dǎo)致單臺(tái)數(shù)據(jù)庫(kù)每天處理 9千萬(wàn)的查詢)。而我的整體數(shù)據(jù)庫(kù)服務(wù)器平均負(fù)載都在0.5-1左右。

3,Utf8_general_ci 和 utf8_unicode_ci的區(qū)別是什么

utf8_unicode_ci校對(duì)規(guī)則僅部分支持Unicode校對(duì)規(guī)則算法,一些字符還是不能支持。
utf8_unicode_ci不能完全支持組合的記號(hào)。
utf8_general_ci是一個(gè)遺留的 校對(duì)規(guī)則,不支持?jǐn)U展,它僅能夠在字符之間進(jìn)行逐個(gè)比較。這意味著utf8_general_ci校對(duì)規(guī)則進(jìn)行的比較速度很快,但是與使用 utf8_unicode_ci的校對(duì)規(guī)則相比,比較正確性較差。

應(yīng)用上的差別
1、對(duì)于一種語(yǔ)言僅當(dāng)使用utf8_unicode_ci排序做的不好時(shí),才執(zhí)行與具體語(yǔ)言相關(guān)的utf8字符集校對(duì)規(guī)則。例如,對(duì)于德語(yǔ)和法語(yǔ),utf8_unicode_ci工作的很好,因此不再需要為這兩種語(yǔ)言創(chuàng)建特殊的utf8校對(duì)規(guī)則。
2、utf8_general_ci也適用與德語(yǔ)和法語(yǔ),除了‘?'等于‘s',而不是‘ss'之外。如果你的應(yīng)用能夠接受這些,那么應(yīng)該使用 utf8_general_ci,因?yàn)樗俣瓤?。否則,使用utf8_unicode_ci,因?yàn)樗容^準(zhǔn)確。

用一句話概況上面這段話:utf8_unicode_ci比較準(zhǔn)確,utf8_general_ci速度比較快。通常情況下 utf8_general_ci的準(zhǔn)確性就夠我們用的了,在我看過(guò)很多程序源碼后,發(fā)現(xiàn)它們大多數(shù)也用的是utf8_general_ci,所以新建數(shù)據(jù) 庫(kù)時(shí)一般選用utf8_general_ci就可以了
參考:
http://www.diybl.com/course/7_databases/mysql/myxl/20100721/474574.html

中文:http://hi.baidu.com/my_labs/blog/item/ea1a578360dc82ab0cf4d2c0.html
英文:http://stackoverflow.com/questions/766809/whats-the-difference-between-utf8-general-ci-and-utf8-unicode-ci

4,表名中含有特殊字符
復(fù)制代碼 代碼如下:

select * from books where `book-id` = 'b001' 注意是數(shù)字鍵盤上1旁邊的` 不是單引號(hào)
select * from `book-cate`

最好不要用特殊符號(hào) 用book_id就可以不用引號(hào)了

相關(guān)文章

  • mysql觸發(fā)器實(shí)現(xiàn)oracle物化視圖示例代碼

    mysql觸發(fā)器實(shí)現(xiàn)oracle物化視圖示例代碼

    mysql觸發(fā)器實(shí)現(xiàn)oracle物化視圖即不是基于基表的虛表,而是根據(jù)表實(shí)際存在的實(shí)表,需要的朋友可以參考下
    2014-02-02
  • 正確使用MySQL INSERT INTO語(yǔ)句

    正確使用MySQL INSERT INTO語(yǔ)句

    MySQL數(shù)據(jù)庫(kù)是一種小型關(guān)系型數(shù)據(jù)庫(kù)管理系統(tǒng),MySQL數(shù)據(jù)庫(kù)的優(yōu)化是MySQL數(shù)據(jù)庫(kù)操作過(guò)程中非常重要的工作,MySQL數(shù)據(jù)庫(kù)的優(yōu)化能夠?qū)崿F(xiàn)MySQL數(shù)據(jù)庫(kù)操作的簡(jiǎn)便。
    2015-08-08
  • sql四大排名函數(shù)之ROW_NUMBER、RANK、DENSE_RANK、NTILE使用介紹

    sql四大排名函數(shù)之ROW_NUMBER、RANK、DENSE_RANK、NTILE使用介紹

    這篇文章主要介紹了sql四大排名函數(shù)之ROW_NUMBER、RANK、DENSE_RANK、NTILE使用,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-08-08
  • MySQL索引底層數(shù)據(jù)結(jié)構(gòu)詳情

    MySQL索引底層數(shù)據(jù)結(jié)構(gòu)詳情

    這篇文章主要介紹了MySQL索引底層數(shù)據(jù)結(jié)構(gòu)詳情,下面文章圍繞MySQL索引底層數(shù)據(jù)結(jié)構(gòu)的相關(guān)資料展開(kāi)全篇文章,具有一定的參考價(jià)值,需要的小伙伴可以參考一下
    2021-12-12
  • Windows Server 2003下修改MySQL 5.5數(shù)據(jù)庫(kù)data目錄

    Windows Server 2003下修改MySQL 5.5數(shù)據(jù)庫(kù)data目錄

    這篇文章主要介紹了Windows Server 2003下修改MySQL 5.5數(shù)據(jù)庫(kù)data目錄,需要的朋友可以參考下
    2016-04-04
  • MySQL讀取JSON轉(zhuǎn)換的方式

    MySQL讀取JSON轉(zhuǎn)換的方式

    這篇文章主要介紹了MySQL讀取JSON轉(zhuǎn)換的方式,本文給大家分享兩種方式給大家講解處理方式,結(jié)合實(shí)例代碼給大家介紹的非常詳細(xì),需要的朋友可以參考下
    2022-03-03
  • CentOS 6.5 i386 安裝MySQL 5.7.18詳細(xì)教程

    CentOS 6.5 i386 安裝MySQL 5.7.18詳細(xì)教程

    這篇文章主要介紹了CentOS 6.5 i386 安裝MySQL 5.7.18詳細(xì)教程,需要的朋友可以參考下
    2017-04-04
  • MySQL的索引和復(fù)合索引的實(shí)現(xiàn)

    MySQL的索引和復(fù)合索引的實(shí)現(xiàn)

    在數(shù)據(jù)庫(kù)中,索引是一種特殊的數(shù)據(jù)結(jié)構(gòu),它可以幫助我們快速地查詢和檢索數(shù)據(jù),本文主要介紹了MySQL的索引和復(fù)合索引的實(shí)現(xiàn),感興趣的可以了解一下
    2023-11-11
  • mysql 忘記密碼的解決方法(linux和windows小結(jié))

    mysql 忘記密碼的解決方法(linux和windows小結(jié))

    下面是linux和windows下mysql丟失密碼的解決辦法
    2008-12-12
  • MySQL多表聯(lián)查的實(shí)現(xiàn)思路

    MySQL多表聯(lián)查的實(shí)現(xiàn)思路

    數(shù)據(jù)庫(kù)應(yīng)用在我們的生活中是很常見(jiàn)的,在編輯一些應(yīng)用以及軟件的時(shí)候都需要用到數(shù)據(jù)庫(kù)來(lái)存儲(chǔ)數(shù)據(jù),下面這篇文章主要給大家介紹了關(guān)于MongoDB中實(shí)現(xiàn)多表聯(lián)查的相關(guān)資料,需要的朋友可以參考下
    2023-02-02

最新評(píng)論

鞍山市| 墨竹工卡县| 汝南县| 富顺县| 西安市| 虎林市| 喀喇沁旗| 凉城县| 教育| 乐山市| 桂阳县| 江陵县| 台湾省| 茶陵县| 静海县| 沙坪坝区| 双辽市| 新龙县| 大竹县| 新津县| 馆陶县| 临猗县| 池州市| 隆回县| 曲靖市| 万盛区| 同江市| 盱眙县| 富民县| 平顶山市| 凤城市| 华宁县| 海宁市| 沂源县| 荆州市| 湟中县| 乐山市| 新营市| 云和县| 广河县| 潼南县|