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

三道MySQL新手入門面試題,通往自由的道路

 更新時間:2021年07月01日 10:30:25   作者:太子爺哪吒  
這篇文章主要為大家分享了最有價值的3道MySQL面試題,,感興趣的小伙伴們可以參考一下

1. 講講你認識MySQL鎖吧

對于數(shù)據(jù)庫來講,讀寫都是非常頻繁的吧,在并發(fā)量來的時候,在進行讀寫操作時,可能會產(chǎn)生數(shù)據(jù)的不一致,這時候需要一些機制來保證訪問的次序,所以鎖就可以在一定限度保護它的一致性。

首先我們可以按鎖的粒度分:

1.表級鎖:它上鎖是鎖住的整張表,當(dāng)下一個事務(wù)來訪問的時候,必須等到當(dāng)前事務(wù)把鎖釋放了,才能對表進行操作訪問。

特點:表鎖開銷小,加鎖快,然后它的鎖的粒度最大,不會出現(xiàn)死鎖的現(xiàn)象,發(fā)送鎖的沖突的概率最高,并發(fā)度最低。

2.行級鎖:它上鎖是鎖住一行或者多行的記錄,當(dāng)下個事務(wù)訪問的時候,只有被鎖住的字段不能訪問,其他可以正常的訪問操作。

特點:行鎖開銷大,加鎖滿,然后它的鎖的粒度最小,會出現(xiàn)死鎖的現(xiàn)象,發(fā)送鎖的沖突的概率最低,并發(fā)度最高。

3.頁面鎖:它是介于表鎖和行鎖之間的一種鎖,它鎖住的是相鄰的行記錄。

特點:因為它是介于表鎖和行鎖之間的,開銷大、加鎖、鎖的粒度、發(fā)送鎖的沖突的概率、并發(fā)度都是中等一般的。也會出現(xiàn)死鎖的現(xiàn)象。

我們也可以按鎖的類別分類:

  • 共享鎖:也稱為讀鎖,簡稱s鎖,當(dāng)用戶對數(shù)據(jù)訪問時,對數(shù)據(jù)加上讀鎖,其他的事務(wù)只能對數(shù)據(jù)也加上讀鎖,而不能加上寫鎖,知道所有的讀鎖釋放完成后,才能對數(shù)據(jù)進行加寫鎖的操作。然后主要的特性就是加上讀鎖后,支持并發(fā)的讀取數(shù)據(jù),讀取數(shù)據(jù)的時候不能進行修改數(shù)據(jù),避免重復(fù)讀的出現(xiàn),所以讀鎖也可以加多個。
  • 排它鎖:也稱為寫鎖,簡稱x鎖,當(dāng)用戶對數(shù)據(jù)進行寫入的時候,對數(shù)據(jù)加上一個寫鎖,其他事務(wù)對數(shù)據(jù)不能加任何鎖包括讀鎖和寫鎖,只能等待寫鎖的釋放才能對數(shù)據(jù)進行讀取或者寫入操作。主要的特性就是在數(shù)據(jù)修改的時候,不允許任何進行訪問或修改,可以避免臟數(shù)據(jù)和臟讀的出現(xiàn),寫鎖只能加一個,并且和其他的排它鎖和共享鎖互斥。
  • 意向共享鎖:當(dāng)一個事務(wù)試圖對整個表加上共享鎖時,會首先需要獲取到這個表的意向共享鎖。
  • 意向排它鎖:當(dāng)一個事務(wù)試圖對整個表加上排它鎖時,會首先需要獲取到這個表的意向排它鎖。

2. 你知道什么是事務(wù)、四大特性、隔離級別嗎?

事務(wù):

是數(shù)據(jù)庫從一種一致性狀態(tài)到另一種一致性的狀態(tài),即事務(wù)的操作,要么都執(zhí)行,要么都不執(zhí)行。比如事務(wù)是將一組業(yè)務(wù)操作中的多條SQL語句當(dāng)做一個整體,那么這個多條語句要么都成功執(zhí)行,要么都執(zhí)行失敗。而這數(shù)據(jù)庫引擎中,InnoDB是支持事務(wù),而MyIASM就不支持啦。

四大特性:

  • Atomicity原子性:事務(wù)中的各項操作,要么全部執(zhí)行成功,要么全部執(zhí)行失敗。C
  • onsistency一致性:數(shù)據(jù)庫總是從一個一致性狀態(tài)轉(zhuǎn)換為另一個一致性的狀態(tài)。表示事務(wù)結(jié)束后系統(tǒng)狀態(tài)一致。
  • Isolation隔離性:表示多個事務(wù)并發(fā)訪問時,事務(wù)之間是隔離的不可見的。一個事務(wù)不會影響到其他事務(wù)的運行。
  • Durabilty持久性:表示一個事務(wù)一旦提交成功,他對數(shù)據(jù)庫的數(shù)據(jù)操作是永久性的。

而這ACID主要是由什么保證呢?

  • A原子性是由undo log 日志保證的,它記錄了需要回滾的日志信息,事務(wù)回滾撤銷時就會執(zhí)行已經(jīng)成功的SQL語句
  • C一致性是由其他三大特性保證,并且程序代碼要保證業(yè)務(wù)的一致性
  • I隔離性是由MVCC保證
  • D持久性是由內(nèi)存+redo log保證,mysql修改數(shù)據(jù)的同時在內(nèi)存和redo log日志中記錄這次操作,如果數(shù)據(jù)庫宕機的話,就可以從redo log中恢復(fù)。

隔離級別:

  • read-uncommitted讀取未提交:最低的隔離級別,讀取尚未的提交的數(shù)據(jù),也被為臟讀,它可能會發(fā)生就是臟讀現(xiàn)象和不可重復(fù)讀和幻讀現(xiàn)象。
  • read-committed讀已提交:可以讀取并發(fā)事務(wù)中已經(jīng)提交的數(shù)據(jù),可以有效的阻止臟讀,但是每次讀取的值發(fā)生了改變,所以不可重復(fù)讀和幻讀仍有可能發(fā)生。
  • repeatable-read可重復(fù)讀:mysql的默認隔離級別,對同一字段的讀取多次結(jié)果是一致的,可以阻止臟讀和不可重復(fù)讀,但是幻讀仍會發(fā)生。那幻讀就是本來我讀取的只有一行的數(shù)據(jù),此時再次讀取可能多了一行,此時就是幻讀了。
  • serializable可串行化:最高的隔離級別,可以有效的解決臟讀、不可重復(fù)讀、幻讀現(xiàn)象。但是效率會比較低。
隔離級別 臟讀 不可重復(fù)讀 幻讀
read-uncommitted讀取未提交 可能會出現(xiàn) 可能會出現(xiàn) 可能會出現(xiàn)
read-committed讀已提交 可以解決 可能會出現(xiàn) 可能會出現(xiàn)
repeatable-read可重復(fù)讀 可以解決 可以解決 可能會出現(xiàn)
serializable可串行化 可以解決 可以解決 可以解決

對于數(shù)據(jù)一致性來說,隔離級別越高,越能夠保證數(shù)據(jù)的完整性和一致性,但是對并發(fā)的性能影響越大。大多數(shù)數(shù)據(jù)庫的默認級別是read-committed讀已提交,比如Oracle ,但是 對于MySQL 的默認隔離級別是 repeatable-read可重復(fù)讀。

3. MyISAM 和 InnoDB 存儲引擎的區(qū)別

對于引擎來說,我們可以使用一個命令來查看:

SHOW ENGINES;

比較重要的就是這兩個MyISAM和InnoDB。為什么呢,對于MySQL來說,5版本之前就是使用的MyISAM,而現(xiàn)在默認就是InnoDB了。

MyISAM :

對于MyISAM來說并發(fā)性比較差,并且不支持事務(wù),所以相對來說,應(yīng)用的場景會比較少,主要特點有:

  • 不支持事務(wù)操作,ACID四大特性也就不存在了。
  • 不支持外鍵操作,如果強行增加外鍵,MySQL 不會報錯,只不過外鍵不起作用。
  • MyISAM 支持的鎖是表級鎖,所以并發(fā)性能比較差,加鎖比較快,鎖沖突比較高,但是可以避免死鎖的情況。
  • 存儲結(jié)構(gòu)中,MyISAM會在磁盤上存儲三個文件,文件名和表名相同,擴展名分別是存儲表定義、存儲數(shù)據(jù)、存儲索引。
  • MyISAM 支持的索引類型有 全局索引、B-Tree 索引
  • 性能來說:SELECT 性能較高,適用于查詢較多的情況

InnoDB :

現(xiàn)在MySQL默認的存儲引擎,相對于 MyISAM,InnoDB 存儲引擎有了較大的改變,主要特點有:

  • 支持事務(wù)操作,具備事務(wù) ACID 隔離特性。
  • InnoDB 支持外鍵操作。
  • InnoDB 支持鎖不僅有行級鎖也支持表級鎖,行級鎖并發(fā)性能比較好,會發(fā)生死鎖的情況。
  • 存儲結(jié)構(gòu)中,InnoDB 也有存儲表結(jié)構(gòu) 定義,但是不同的是,InnoDB 的表數(shù)據(jù)與索引數(shù)據(jù)是存儲在一起的,都位于 B+ 數(shù)的葉子節(jié)點上,而 MyISAM 的表數(shù)據(jù)和索引數(shù)據(jù)是分開的。
  • InnoDB 有安全的日志文件,這個日志文件用于恢復(fù)因數(shù)據(jù)庫崩潰或其他情況導(dǎo)致的數(shù)據(jù)丟失問題,保證數(shù)據(jù)的一致性。
  • InnoDB 和 MyISAM 支持的索引類型相同,但具體實現(xiàn)因為文件結(jié)構(gòu)的不同有很大差異。
  • 性能來說,如果需要執(zhí)行大量的增刪改操作,推薦使用 InnoDB 存儲引擎。

兩者區(qū)別:

  1. 事務(wù):MYISAM不支持事務(wù),但是每次查詢都是原子性的,而Innodb是支持事務(wù)的。
  2. 鎖:MYISAM支持表級鎖,即每次操作都會對整個表枷鎖,而Innodb支持行級鎖,支持寫時高并發(fā)
  3. 外鍵:MYSIAM不支持外鍵,而Innodb支持外鍵約束
  4. 存儲表的總行數(shù):MYISAM支持儲表的總行數(shù),而Innodb不支持儲表的總行數(shù)
  5. 存儲文件:MYISAM存儲表有三個文件,索引文件,表結(jié)構(gòu)文件,數(shù)據(jù)文件,而Innodb是存儲一個共享文件,索引和數(shù)據(jù)存儲在一起,大小會受操作系統(tǒng)文件大小限制
  6. 場景:MYISAM適合讀比較多,而Innodb適合寫多。

總結(jié)

這篇文章就到這里了,如果這篇文章對你也有所幫助,希望您能多多關(guān)注腳本之家的更多內(nèi)容!

相關(guān)文章

  • RestTemplate如何通過HTTP?Basic?Auth認證示例說明

    RestTemplate如何通過HTTP?Basic?Auth認證示例說明

    這篇文章主要為大家介紹了RestTemplate如何通過HTTP?Basic?Auth認證的示例說明,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-03-03
  • Spring容器注冊組件實現(xiàn)過程解析

    Spring容器注冊組件實現(xiàn)過程解析

    這篇文章主要介紹了Spring容器注冊組件實現(xiàn)過程解析,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-03-03
  • Spring Boot集成Swagger接口分類與各元素排序問題

    Spring Boot集成Swagger接口分類與各元素排序問題

    這篇文章主要介紹了Spring Boot集成Swagger接口分類與各元素排序問題,首先我們需要對Swagger中的接口也就是以Controller 層作為第一級梯度進行組織的,Controller在我們實際開發(fā)中,與其他具體接口之間是存在一對多的關(guān)系,本文給大家介紹的非常詳細,需要的朋友參考下吧
    2023-10-10
  • Python基礎(chǔ)之如何使用multiprocessing模塊

    Python基礎(chǔ)之如何使用multiprocessing模塊

    今天帶大家學(xué)習(xí)python多進程的相關(guān)知識,文中對multiprocessing模塊的使用作了非常詳細的介紹,需要的朋友可以參考下
    2021-06-06
  • SpringCloud中的Seata基本介紹與安裝教程

    SpringCloud中的Seata基本介紹與安裝教程

    Seata 是一款開源的分布式事務(wù)解決方案,致力于提供高性能和簡單易用的分布式事務(wù)服務(wù),這篇文章主要介紹了SpringCloud之Seata基本介紹與安裝,需要的朋友可以參考下
    2024-01-01
  • SpringBoot中使用@scheduled定時執(zhí)行任務(wù)的坑

    SpringBoot中使用@scheduled定時執(zhí)行任務(wù)的坑

    本文主要介紹了SpringBoot中使用@scheduled定時執(zhí)行任務(wù)的坑,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-05-05
  • 淺談Java并發(fā)編程之Lock鎖和條件變量

    淺談Java并發(fā)編程之Lock鎖和條件變量

    這篇文章主要介紹了淺談Java并發(fā)編程之Lock鎖和條件變量,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-08-08
  • 解決IDEA JSP沒有代碼提示問題的幾種方法

    解決IDEA JSP沒有代碼提示問題的幾種方法

    這篇文章主要介紹了解決IDEA JSP沒有代碼提示問題的幾種方法,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-10-10
  • IDEA自定義Maven倉庫的實現(xiàn)

    IDEA自定義Maven倉庫的實現(xiàn)

    使用Maven進行Java程序開發(fā)時,開發(fā)者能夠極大地提高開發(fā)效率,本文主要介紹了IDEA自定義Maven倉庫的實現(xiàn),具有一定的參考價值,感興趣的可以了解一下
    2024-03-03
  • 詳解Java二叉排序樹

    詳解Java二叉排序樹

    這篇文章主要介紹了Java二叉排序樹,包括二叉排序樹的定義、二叉排序樹的性質(zhì)、二叉排序樹的插入和查找等,感興趣的小伙伴們可以參考一下
    2015-12-12

最新評論

昌都县| 比如县| 海城市| 肇庆市| 石城县| 邢台市| 彰武县| 高邮市| 灵宝市| 惠水县| 醴陵市| 德江县| 靖远县| 南阳市| 方正县| 原平市| 吉隆县| 西安市| 阿勒泰市| 色达县| 夏河县| 昌黎县| 砚山县| 聂拉木县| 庄河市| 宝兴县| 沅江市| 华安县| 梁山县| 财经| 册亨县| 应城市| 辽阳县| 岳池县| 泰和县| 昌黎县| 遂平县| 海伦市| 兴安县| 辽阳县| 长泰县|