成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

走進(jìn)mysql基礎(chǔ)

Channe / 3079人閱讀

摘要:持久性一旦事務(wù)提交成功,產(chǎn)生的數(shù)據(jù)變更將永久保存在數(shù)據(jù)庫中。不可重復(fù)讀執(zhí)行兩次相同的查詢,可能得到不同的結(jié)果??纱谢瘒?yán)格的串行阻塞,并發(fā)能力不好。數(shù)據(jù)時記錄刪除時間為當(dāng)前事務(wù)版本號。非聚簇索引樹的葉子節(jié)點存放實際數(shù)據(jù)的地址。

前言

作為后端猿的我們,不出意外每天都會和mysql打交道。除了每天寫不膩的CURD語句,關(guān)于mysql我們應(yīng)該要了解它的那些基礎(chǔ)知識呢?

直入主題 簡單畫出mysql的邏輯架構(gòu)圖?
       接 入 層
-----------------------
     ?          ?      
     ?          ?    
    緩 存      解 析 器
                 ?      
                 ?
              優(yōu) 化 器 
-----------------------

        引 擎
mysql常見的引擎有哪些,區(qū)別是什么?

InnoDB

支持事務(wù)

行鎖

聚簇索引

輔助索引(二級索引)索引存放的是主鍵

MyISAM

不支持事務(wù)

表鎖

崩潰無法安全恢復(fù)

非聚簇索引

輔助索引(二級索引)索引存放的還是實際數(shù)據(jù)的地址

Memory

基于內(nèi)存

表鎖

字段長度固定,不支持blob,text, 即使指定vachar實際儲存也會轉(zhuǎn)為char

Archive

只支持insert/select操作

適合日志等

...

什么是事務(wù)的ACDI概念?

A: Atomicity, 原子性, 一個事務(wù)的所有操作視為一個整體,要不全部成功,要不全部失敗。

C: Consistency, 一致性, 一個事務(wù)下的所有的數(shù)據(jù)狀態(tài)變更,只有事務(wù)提交成功才全部變更。

D: Durability, 持久性, 一旦事務(wù)提交成功,產(chǎn)生的數(shù)據(jù)變更將永久保存在數(shù)據(jù)庫中。

I: Isolation, 隔離性, 一個事務(wù)在提交之前對其他事務(wù)不可見。

什么是臟讀,幻讀,不可重復(fù)讀?

臟讀:讀取未提交事務(wù)的數(shù)據(jù),數(shù)據(jù)可能被回滾,不符合隔離性的定義。

幻讀:一個事務(wù)批量讀取了一批數(shù)據(jù)時,另一個事務(wù)提交了新的數(shù)據(jù),當(dāng)之前的事務(wù)再次讀取時,會產(chǎn)生幻影行。

不可重復(fù)讀:執(zhí)行兩次相同的查詢,可能得到不同的結(jié)果。

mysql事務(wù)的隔離級別有哪些?默認(rèn)的隔離級別是什么?

未提交讀:一個事務(wù)還未提交,另一個事務(wù)就可以讀取,這樣導(dǎo)致的后果,臟讀。

提交讀(又叫,不可重復(fù)讀):一個事務(wù)未提交對其他事務(wù)不可見,但是會產(chǎn)生幻讀和不可重復(fù)讀。

可重復(fù)讀(mysql默認(rèn)隔離級別):保證同一個事務(wù)下多次讀取的結(jié)果一致,但是會產(chǎn)生幻讀。

可串行化:嚴(yán)格的串行阻塞,并發(fā)能力不好。

隔離級別 臟讀 不可重復(fù)讀 幻讀
Read Uncommitted
Read Committed ×
Repeatable Read × ×
Serializable × × ×
什么是MVCC?簡述MVCC的作用及原理?

MVCC:Multi Version Concurrency Control, 多版本并發(fā)控制,mysql防止幻讀的一種技術(shù)手段。每行數(shù)據(jù)存在間隙行,間隙行存放該行數(shù)據(jù)的創(chuàng)建時間,刪除時間,這里的時間實際是事務(wù)的版本號。當(dāng),

select數(shù)據(jù)時:只查詢創(chuàng)建時間小于等于當(dāng)前事務(wù)版本號 -> 當(dāng)前事務(wù)或當(dāng)前事務(wù)之前插入的行,刪除時間大于當(dāng)前版本號的行 -> 當(dāng)前事務(wù)版本前未被刪除的行。

update數(shù)據(jù)時:在原有行a的基礎(chǔ)上復(fù)制行a",行a的刪除時間設(shè)置為當(dāng)前的事務(wù)版本號,行a"的創(chuàng)建時間設(shè)置為當(dāng)前的事務(wù)版本號。

insert數(shù)據(jù)時:記錄創(chuàng)建時間為當(dāng)前事務(wù)版本號。

delete數(shù)據(jù)時:記錄刪除時間為當(dāng)前事務(wù)版本號。

死鎖是怎么出現(xiàn)的,并寫出簡單示例?

死鎖產(chǎn)生的原因是兩個事務(wù)互相等待對方釋放,產(chǎn)生了循環(huán)依賴,mysql采用了死鎖檢測(檢測到循環(huán)依賴返回錯誤)和死鎖超時(超時回滾持有行鎖最少的事務(wù))的方式盡可能去避免死鎖。例如:

行鎖:

UPDATE `table_demo` SET `a` = "test" WHERE `b` = "lalala";
UPDATE `table_demo` SET `b` = "test" WHERE `a` = "lalala";

UPDATE `table_demo` SET `b` = "test" WHERE `a` = "lalala";
UPDATE `table_demo` SET `a` = "test" WHERE `b` = "lalala";
什么是聚簇索引和非聚簇索引?

聚簇索引:InnoDB, B+樹的葉子節(jié)點存放實際數(shù)據(jù)。

非聚簇索引:MyISAM, B+樹的葉子節(jié)點存放實際數(shù)據(jù)的地址

什么是覆蓋索引?

覆蓋索引:要查詢的行被索引覆蓋,從索引中可以直接讀取,不需要回表查詢。例如:

CREATE TABLE `demo_table`(
    `id` int(11) unsigned NOT NULL AUTO_INCREMENT COMMENT "自增ID",
    `username` char(32) NOT NULL DEFAULT "" COMMENT "用戶名",
    `password` char(32) NOT NULL DEFAULT "" COMMENT "密碼",
    PRIMARY KEY (`id`),
    KEY `idx_username` (`username`)
)ENGINE=InnoDB DEFAULT CHARSET=UTF8;
explain select `username` from `demo_table` where `username` = "demo";
+----+-------------+------------+------+---------------+--------------+---------+-------+------+--------------------------+
| id | select_type | table      | type | possible_keys | key          | key_len | ref   | rows | Extra                    |
+----+-------------+------------+------+---------------+--------------+---------+-------+------+--------------------------+
|  1 | SIMPLE      | demo_table | ref  | idx_username  | idx_username | 96      | const |    1 | Using where; Using index |
+----+-------------+------------+------+---------------+--------------+---------+-------+------+--------------------------+

Extra里的Using index就是使用了覆蓋索引的意思。

什么是索引的最左前綴匹配原則?

個人目前理解:例如使用聯(lián)合索引,從左向右依次匹配,未匹配到索引字段或第一個范圍查找(between、like、大于、小于)為止,及該部分索引有效。

InnoDB為什么不采用紅黑樹而采用B+樹作為索引存放數(shù)據(jù)結(jié)構(gòu),并簡要畫出B+樹?(目前我個人的理解比較淺歡迎積極糾正~)

紅黑樹本質(zhì)是二叉樹,每個節(jié)點最多擁有兩個子節(jié)點,所以紅黑樹的深度較深。

B樹每個節(jié)點最多可以有n個子節(jié)點,根節(jié)點常駐內(nèi)存且每個節(jié)點剛好申請1個頁的大小,假如每個節(jié)點擁有100個子節(jié)點,那百萬級的數(shù)據(jù)我們基本上只需要深度是3就可以存下 => 100^3,這樣就減少的io次數(shù)(一個節(jié)點的大小通常為磁盤一個頁的大小)。

又有“局部性原理”(一旦一個數(shù)據(jù)被查詢,那么它附近的數(shù)據(jù)可能也會需要被查詢),其次B+樹的葉子節(jié)點構(gòu)成一個鏈表,這樣我們就可以很容易的查詢出一段范圍的數(shù)據(jù),其次B+樹的根節(jié)點和內(nèi)部節(jié)點只存放該索引下一個子節(jié)點的位置的指針,數(shù)據(jù)只存放在葉子節(jié)點里,這樣非葉子節(jié)點就可以有更多的空間存放索引的位置,索引的范圍就可以盡可能的大,從而樹的深度就可能的小。

結(jié)語

后續(xù)持續(xù)修正和補(bǔ)充,如果有什么寫的不對的地方歡迎大家積極指正,謝謝大家。

掃面下方二維碼關(guān)注我的技術(shù)公眾號,及時為大家推送我的原創(chuàng)技術(shù)分享

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/28208.html

相關(guān)文章

  • 走進(jìn)Vue時代進(jìn)階篇(01):重構(gòu)電商購物車模塊

    摘要:歡迎你們跟著閏土大叔走進(jìn)時代。其中購買數(shù)量可以增加或減少,每類商品還可以從購物車中移除。后記這大概就是一次用重構(gòu)電商項目中的購物車模塊的所有實現(xiàn)過程。作者閏土大叔鏈接來源掘金著作權(quán)歸作者所有。 前言 從這篇文章開始,我準(zhǔn)備給大家分享一些關(guān)于Vue.js這門框架的技巧性系列文章,正好我們公司項目中也用到了Vue。所以,教是最好的學(xué)。進(jìn)階篇比較適合于二三線城市,還在小廠打拼的童鞋們。歡迎你...

    kk_miles 評論0 收藏0
  • 靈雀云K8s培訓(xùn)走進(jìn)『招商銀行』總部

    摘要:月日日,靈雀云企業(yè)定制培訓(xùn)在深圳招商銀行總部圓滿結(jié)束。靈雀云培訓(xùn)中強(qiáng)調(diào)理論實踐工具落地相結(jié)合。靈雀云是官方認(rèn)證培訓(xùn)合作伙伴服務(wù)提供商。不久之后,靈雀云還將推出微服務(wù)的培訓(xùn)課程。 showImg(https://segmentfault.com/img/bVblpFV?w=600&h=334); 12月13日-14日,靈雀云企業(yè)定制k8s培訓(xùn)在深圳招商銀行總部圓滿結(jié)束。 來自招行總部信息...

    xcc3641 評論0 收藏0
  • SaaS伙伴走進(jìn)華為云后,中國公有云格局將改寫嗎?

    摘要:最近華為云開始發(fā)力,在全國范圍內(nèi)開展伙伴走進(jìn)華為云活動,展示了其在公有云方面的決心。年華為殺入公有云,有的看好有的唱衰,但是無疑為中國公有云市場增加了變數(shù)。年月華為正式宣布進(jìn)入公有云市場,成立華為云。2017年9月舉辦的全聯(lián)接大會(HUAWEI CONNECT 2017)上,華為副董事長、輪值CEO郭平表示,華為已經(jīng)戰(zhàn)略投入了公有云,并承諾長期投入,華為有決心也有能力和合作伙伴打造世界上的5...

    frank_fun 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<