MySql隨筆 2021-04-26

關(guān)系型數(shù)據(jù)庫(kù)和非關(guān)系型數(shù)據(jù)庫(kù)????

????關(guān)系型數(shù)據(jù)庫(kù)? (SQL)

????????MySql榔袋、Oracle请琳、Sql Sever....

? ? ? ? 通過(guò)表與表之間的行和列儲(chǔ)存數(shù)據(jù)

????非系型數(shù)據(jù)庫(kù)? (NoSQL)

? ? ? ? Redis、MogDB

? ? ? ? 對(duì)象存儲(chǔ),通過(guò)對(duì)象屬性來(lái)決定


INNODB與MYISAM的區(qū)別

????可在創(chuàng)建表后加入? EMGING=INNODB? 來(lái)選擇INNODB引擎

? ? ? ? ? ? ? ? ? ? ? ? ?????????MYISAM? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? INNODB

事務(wù)支持? ? ? ? ? ? ? ? ? ? 不支持? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 支持

數(shù)據(jù)行鎖定????????? ? ? ? 不支持? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 支持

外鍵約束??????????????? ? ? 不支持? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 支持

全文索引? ? ? ? ? ? ? ? ? ? ? 支持? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 不支持

表空間大小? ? ? ? ? ? ? ? ? 較小? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 較大,約為兩倍

常用操作:

? ??MYISAM:節(jié)約空間,運(yùn)行速度較快责球。

? ??INNODB:安全性高,事務(wù)處理,支持多表多用戶操作棕诵。

在物理內(nèi)存上:

? ? ? ?MySql表數(shù)組都存儲(chǔ)在data文件夾內(nèi)

? ?????INNODB:在數(shù)據(jù)庫(kù)表中只有一個(gè)? *.frm? 文件裁良,以及? ibdata1? 文件夾

? ??????MYISAM:對(duì)應(yīng)文件

? ? ? ? ? ? ? ? ? ? ? ? ? ? *.frm? ? ? ? 表結(jié)構(gòu)定義文件

? ? ? ? ? ? ? ? ? ? ? ? ? ? *.MYD? ? ? ?數(shù)據(jù)文件

? ? ? ? ? ? ? ? ? ? ? ? ? ? *.MYI? ? ? ? 索引文件



設(shè)置數(shù)據(jù)庫(kù)的表的字符集

? ? 不設(shè)置的話默認(rèn)字符集為L(zhǎng)atin1,不支持中文⌒L祝可以在創(chuàng)建表語(yǔ)句后加? charset=utf8

? ? 也可以修改? my.ini? 文件? character-set-server=utf8 但不建議? 因?yàn)槿绻鼡Q環(huán)境容易發(fā)生亂碼的問(wèn)題价脾。



delete和TAUNCATE的區(qū)別

????相同:都可以刪除數(shù)據(jù),不會(huì)影響表結(jié)構(gòu)

? ? 不同:

? ? ? ? 1.TAUNCATE? 重新設(shè)置自增列 計(jì)數(shù)器會(huì)歸零

? ? ? ? 2.TAUNCATE? 不會(huì)影響事務(wù)

? ? ? ? 3.delete刪除如果引擎是??INNODB? 重啟數(shù)據(jù)庫(kù)后自增列會(huì)從1開(kāi)始(存在內(nèi)存中)

? ? ? ? 4.delete刪除如果引擎是??MYISAM??重啟數(shù)據(jù)庫(kù)后繼續(xù)從上一個(gè)子增量開(kāi)始(存在文件中)



? ??
建表規(guī)約#

強(qiáng)制部分#

【強(qiáng)制】?表達(dá)是與否概念的字段笛匙,必須使用?is_xxx?的方式命名侨把,數(shù)據(jù)類型是?unsigned tinyint?(1?表示是,0?表示否)妹孙。

說(shuō)明任何字段如果為非負(fù)數(shù)秋柄,必須是?unsigned。

正例表達(dá)邏輯的字段名?is_deleted蠢正,1?表示刪除骇笔,0?表示未刪除。

【強(qiáng)制】?表名嚣崭、字段名必須使用小寫字母或數(shù)字笨触,禁止出現(xiàn)數(shù)字開(kāi)頭,禁止兩個(gè)下劃線中間只出現(xiàn)數(shù)字雹舀。數(shù)據(jù)庫(kù)字段名的修改代價(jià)很大芦劣,因?yàn)闊o(wú)法進(jìn)行預(yù)發(fā)布,所以字段名稱需要慎重考慮说榆。

說(shuō)明MySQL?在?Windows?下不區(qū)分大小寫虚吟,但在?Linux?下默認(rèn)是區(qū)分大小寫。因此签财,數(shù)據(jù)庫(kù)名串慰、表名、字段名唱蒸,都不允許出現(xiàn)任何大寫字母邦鲫,避免節(jié)外生枝。

正例aliyun_admin油宜,rdc_config,level3_name

反例AliyunAdmin怜姿,rdcConfig慎冤,level_3_name

【強(qiáng)制】?禁用保留字,如?desc沧卢、range蚁堤、match、delayed?等但狭,請(qǐng)參考?MySQL?官方保留字披诗。

【強(qiáng)制】?主鍵索引名為?pk_?字段名撬即;唯一索引名為?uk_?字段名;普通索引名則為?idx_?字段名呈队。

說(shuō)明pk_?即?primary key剥槐;uk_?即?unique key;idx_?即?index?的簡(jiǎn)稱宪摧。

【強(qiáng)制】?小數(shù)類型為decimal粒竖,禁止使用?float?和?double。

說(shuō)明在存儲(chǔ)的時(shí)候几于,float?和?double?都存在精度損失的問(wèn)題蕊苗,很可能在比較值的時(shí)候,得到不正確的結(jié)果沿彭。如果存儲(chǔ)的數(shù)據(jù)范圍超過(guò)?decimal?的范圍朽砰,建議將數(shù)據(jù)拆成整數(shù)和小數(shù)并分開(kāi)存儲(chǔ)。

【強(qiáng)制】?如果存儲(chǔ)的字符串長(zhǎng)度幾乎相等喉刘,使用?char?定長(zhǎng)字符串類型瞧柔。

【強(qiáng)制】?varchar?是可變長(zhǎng)字符串,不預(yù)先分配存儲(chǔ)空間饱搏,長(zhǎng)度不要超過(guò)?5000非剃,如果存儲(chǔ)長(zhǎng)度大于此值,定義字段類型為?text推沸,獨(dú)立出來(lái)一張表备绽,用主鍵來(lái)對(duì)應(yīng),避免影響其它字段索引效率鬓催。

【強(qiáng)制】?表必備三字段:id,?create_time,?update_time肺素。

說(shuō)明:其中?id?必為主鍵,類型為?bigint unsigned宇驾、單表時(shí)自增倍靡、步長(zhǎng)為 1。create_time,?update_time

的類型均為?datetime?類型课舍。

推薦部分#

【推薦】?表的命名最好是遵循“業(yè)務(wù)名稱_表的作用”塌西。

正例alipay_task?/?force_project?/?trade_config。

【推薦】?庫(kù)名與應(yīng)用名稱盡量一致筝尾。

【推薦】?如果修改字段含義或?qū)ψ侄伪硎镜臓顟B(tài)追加時(shí)捡需,需要及時(shí)更新字段注釋。

【推薦】?字段允許適當(dāng)冗余筹淫,以提高查詢性能站辉,但必須考慮數(shù)據(jù)一致。

冗余字段應(yīng)遵循:

不是頻繁修改的字段。

不是?varchar?超長(zhǎng)字段饰剥,更不能是?text?字段殊霞。

不是唯一索引的字段。

正例商品類目名稱使用頻率高汰蓉,字段長(zhǎng)度短绷蹲,名稱基本一不變,可在相關(guān)聯(lián)的表中冗余存儲(chǔ)類目名稱古沥,避免關(guān)聯(lián)查詢瘸右。

【推薦】?單表行數(shù)超過(guò)?500?萬(wàn)行或者單表容量超過(guò)?2GB,才推薦進(jìn)行分庫(kù)分表岩齿。

說(shuō)明如果預(yù)計(jì)三年后的數(shù)據(jù)量根本達(dá)不到這個(gè)級(jí)別太颤,請(qǐng)不要在創(chuàng)建表時(shí)就分庫(kù)分表。

參考部分#

【參考】?合適的字符存儲(chǔ)長(zhǎng)度盹沈,不但節(jié)約數(shù)據(jù)庫(kù)表空間龄章、節(jié)約索引存儲(chǔ),更重要的是提升檢索速度乞封。



事務(wù)

什么是事務(wù)

同時(shí)成功或者同時(shí)失敗

事務(wù)原則:ACID原則 原子性做裙,一致性,隔離性肃晚,持久性? ? ? ? ? ? ?(臟讀锚贱,幻讀......)

原子性(Atomicity):要么都成功,要么都失敗

一致性(Consistency):事務(wù)前后的數(shù)據(jù)完整性要保持一致

隔離性(Isolation):多個(gè)用戶并發(fā)訪問(wèn)數(shù)據(jù)庫(kù)時(shí)关串,數(shù)據(jù)庫(kù)為每個(gè)用戶開(kāi)啟的事務(wù)拧廊,不能被其他的操作數(shù)據(jù)所干擾

持久性(Durability):事務(wù)一旦提交則不可逆,被持久化到數(shù)據(jù)庫(kù)中


隔離所導(dǎo)致的一些問(wèn)題

臟讀:一個(gè)事務(wù)讀取了另一個(gè)沒(méi)有提交的數(shù)據(jù)

不可重復(fù)讀:在一個(gè)事務(wù)內(nèi)讀取表中某一行數(shù)據(jù)晋修。多次讀取結(jié)果不同

虛讀(幻讀):在一個(gè)事務(wù)內(nèi)讀取到了別的事務(wù)插入的數(shù)據(jù)吧碾,導(dǎo)致前后讀取不一致



索引

主鍵索引(PRIMARY KEY):唯一的標(biāo)識(shí) 非空且唯一

唯一索引(UNIQUE KEY):避免重復(fù)的列出現(xiàn)

常規(guī)索引(KEY/INDEX):默認(rèn)的? index、key 關(guān)鍵字來(lái)設(shè)置

全文索引(FULLTEXT):在特定引擎下有墓卦,MyISAM? ?快速定位數(shù)據(jù)


基礎(chǔ)語(yǔ)法:


MySql創(chuàng)建函數(shù)方法:


創(chuàng)建函數(shù)之前必須要寫:DELIMITER$$


Creat一個(gè)索引:


索引在數(shù)據(jù)量小的時(shí)候用處不大 但在數(shù)據(jù)量大的時(shí)候區(qū)別十分明顯

索引原則

索引不是越多越好

經(jīng)常變動(dòng)的字段不要加索引 會(huì)發(fā)生索引重構(gòu)影響性能

數(shù)據(jù)量小的表不需要加索引

索引一般加在經(jīng)常用來(lái)查詢的字段上

索引的數(shù)據(jù)結(jié)構(gòu):

? ? ? ? Hash :類型的索引

? ? ? ? Btree: InnoDB? 默認(rèn)的數(shù)據(jù)結(jié)構(gòu)

MySQL索引背后的數(shù)據(jù)結(jié)構(gòu)及算法原理



權(quán)限管理及備份


MySQL備份

為什么要備份:

? ? ? ? 保證重要數(shù)據(jù)不丟失

? ? ? ? 數(shù)據(jù)轉(zhuǎn)移

MySQL數(shù)據(jù)庫(kù)備份方式

? ? ? ? 直接拷貝物理文件

? ? ? ? 在可視話工具中手動(dòng)到處

? ? ? ? 使用命令到處? mysqldump? 命令行導(dǎo)出


規(guī)范數(shù)據(jù)庫(kù)設(shè)計(jì)

糟糕的數(shù)據(jù)庫(kù):

? ? ? ? 數(shù)據(jù)冗余 浪費(fèi)空間

? ? ? ? 數(shù)據(jù)插入刪除都會(huì)麻煩 異尘氪海【屏蔽使用物理外鍵】

? ? ? ? 程序的性能差

較好的數(shù)據(jù)庫(kù):

? ? ? ? 節(jié)省空間

? ? ? ? 保證數(shù)據(jù)庫(kù)完整性

? ? ? ? 方便開(kāi)發(fā)

軟件開(kāi)發(fā)中關(guān)于數(shù)據(jù)庫(kù)的設(shè)計(jì)

? ? ? ? 收集信息,分析需求

? ? ? ? 標(biāo)記實(shí)體落剪,落實(shí)字段

? ? ? ? 標(biāo)記實(shí)體之間的關(guān)系? ? ? ??

三大范式

為什么需要數(shù)據(jù)規(guī)范化睁本?

信息重復(fù)

更新異常

插入異常

? ? ? ? 無(wú)法正常顯示信息

刪除異常

? ? ? ? 丟失有效的信息

第一范式

????原子性:保證每一列不可再分

第二范式

? ? ? ? 前提:滿足第一范式

? ? ? ? 每張表只描述一件事情

第三范式

? ? ? ? 前提:滿足第一范式和第二范式

? ? ? ? 保證數(shù)據(jù)表中的每一列都和主鍵直接相關(guān) 不能間接相關(guān)

規(guī)范和性能的問(wèn)題

關(guān)聯(lián)查詢的表不得超過(guò)三張

考慮商業(yè)化的需求和目標(biāo),數(shù)據(jù)庫(kù)的性能更加重要

故意給某些表增加一些冗余的字段(從多表查詢變?yōu)閱伪恚?/p>



數(shù)據(jù)庫(kù)連接池

由于連接釋放十分浪費(fèi)資源

池化技術(shù):準(zhǔn)備一些預(yù)先的資源忠怖,調(diào)用時(shí)可以直接連接

最大連接數(shù):業(yè)務(wù)最高承受上限??

最小連接數(shù):程序常用的鏈接數(shù)

等待超時(shí)

編寫連接池? 實(shí)現(xiàn)接口 DataSource??

DBCP

C3P0

Druid:阿里巴巴

使用了這些數(shù)據(jù)庫(kù)連接池后呢堰,我們?cè)陧?xiàng)目開(kāi)發(fā)中就不需要編寫數(shù)據(jù)庫(kù)代碼了


DBCP:

? ? ? ? 導(dǎo)入jar包:commons-pool? ? ? ? ? ? commons-dbcp

C3P0:

? ? ? ? c3o0-0.9.5.5? ? ? ? ? ? mchange-commons-java-0.2.19


結(jié)論

? ? ? ? 無(wú)論使用什么數(shù)據(jù)源,本質(zhì)都是一樣的脑又,DataSource? 接口不會(huì)變暮胧,方法就不會(huì)變


SHOW PROFILE

1.開(kāi)啟 show profile功能 默認(rèn)記錄15條sql

set profiling = no

2.通過(guò)Show profiles查看語(yǔ)句運(yùn)行時(shí)間

3.診斷具體sql語(yǔ)句 show profile cup,block io for query 加Query_ID


其它參數(shù)

4.嚴(yán)重排查參數(shù)


最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市问麸,隨后出現(xiàn)的幾起案子往衷,更是在濱河造成了極大的恐慌,老刑警劉巖严卖,帶你破解...
    沈念sama閱讀 217,406評(píng)論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件席舍,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡哮笆,警方通過(guò)查閱死者的電腦和手機(jī)来颤,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,732評(píng)論 3 393
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)稠肘,“玉大人福铅,你說(shuō)我怎么就攤上這事∠钜酰” “怎么了滑黔?”我有些...
    開(kāi)封第一講書人閱讀 163,711評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)环揽。 經(jīng)常有香客問(wèn)我略荡,道長(zhǎng),這世上最難降的妖魔是什么歉胶? 我笑而不...
    開(kāi)封第一講書人閱讀 58,380評(píng)論 1 293
  • 正文 為了忘掉前任汛兜,我火速辦了婚禮,結(jié)果婚禮上通今,老公的妹妹穿的比我還像新娘粥谬。我一直安慰自己,他們只是感情好衡创,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,432評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布帝嗡。 她就那樣靜靜地躺著,像睡著了一般璃氢。 火紅的嫁衣襯著肌膚如雪哟玷。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書人閱讀 51,301評(píng)論 1 301
  • 那天一也,我揣著相機(jī)與錄音辉词,去河邊找鬼。 笑死箫攀,一個(gè)胖子當(dāng)著我的面吹牛子漩,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播舆蝴,決...
    沈念sama閱讀 40,145評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼谦絮,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼题诵!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起层皱,我...
    開(kāi)封第一講書人閱讀 39,008評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤性锭,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后叫胖,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體草冈,經(jīng)...
    沈念sama閱讀 45,443評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,649評(píng)論 3 334
  • 正文 我和宋清朗相戀三年瓮增,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了怎棱。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,795評(píng)論 1 347
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡绷跑,死狀恐怖拳恋,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情砸捏,我是刑警寧澤诅岩,帶...
    沈念sama閱讀 35,501評(píng)論 5 345
  • 正文 年R本政府宣布,位于F島的核電站带膜,受9級(jí)特大地震影響吩谦,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜膝藕,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,119評(píng)論 3 328
  • 文/蒙蒙 一式廷、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧芭挽,春花似錦滑废、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 31,731評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至辛馆,卻和暖如春俺陋,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背昙篙。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 32,865評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工腊状, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人苔可。 一個(gè)月前我還...
    沈念sama閱讀 47,899評(píng)論 2 370
  • 正文 我出身青樓缴挖,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親焚辅。 傳聞我的和親對(duì)象是個(gè)殘疾皇子映屋,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,724評(píng)論 2 354

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

  • 第1章 初識(shí)MySQL 1.1 數(shù)據(jù)庫(kù)基礎(chǔ) 1.1.1 什么是數(shù)據(jù)庫(kù) 1.1.2 表 1.1.3 數(shù)據(jù)類型 1.1...
    _Cappuccino_閱讀 12,613評(píng)論 0 0
  • MYSQL 基礎(chǔ)知識(shí) 1 MySQL數(shù)據(jù)庫(kù)概要 2 簡(jiǎn)單MySQL環(huán)境 3 數(shù)據(jù)的存儲(chǔ)和獲取 4 MySQL基本操...
    Kingtester閱讀 7,811評(píng)論 5 116
  • MySQL數(shù)據(jù)庫(kù) 非關(guān)系型數(shù)據(jù)庫(kù)的優(yōu)勢(shì): 性能NOSQL是基于鍵值對(duì)的苟鸯,可以想象成表中的主鍵和值的對(duì)應(yīng)關(guān)系,而且不...
    riverstation閱讀 866評(píng)論 0 0
  • /* Windows服務(wù) */-- 啟動(dòng)MySQLnet start mysql-- 創(chuàng)建Windows服務(wù)sc ...
    阿登20閱讀 198評(píng)論 0 0
  • https://www.cnblogs.com/best/p/6517755.html /* 啟動(dòng)MySQL */...
    程序媛大姐閱讀 523評(píng)論 0 0