MYSQL儲存引擎innodb和myisam的區別
innodb:預設事務型引擎,最重要最廣泛的儲存引擎,效能非常優秀,資料庫儲存在共享表空間,可以通過配置分開。對主鍵查詢的效能高於其他型別的儲存引擎。它內部做了很多優化,從磁碟讀取資料時自動在記憶體構建hash(雜湊)索引,插入資料時自動構建插入緩衝區。它可以通過一些機制和工具支援真正的熱備份,支援崩潰後的安全恢復,支援行級鎖,支援外來鍵。
myisam:5.1版本前,myisam是預設的儲存引擎,擁有全文索引、壓縮、空間函式、不支援事務和行級鎖,不支援崩潰後的安全恢復。表儲存在兩個檔案,myd和myi。它設計簡單,某些場景下效能很好。
其他表引擎:archive、blackhole、csv、memory
優先選擇innodb,因為它的效能非常優秀。
mysql鎖機制:表鎖是日常開發當中常見的問題,因此也是面試當中最常見的考點,當多個查詢同一時刻進行資料修改時,就會產生併發控制的問題。
讀鎖:共享的,不堵塞,多個使用者可以同時讀一個資源,互不干擾。
寫鎖:排他的,一個寫鎖會阻塞其他的寫鎖和讀鎖,這樣可以只允許一個人進行寫入,防止其他使用者讀取正在寫入的資源。
鎖力度:表鎖,系統性能開銷最小,會鎖定整張表,myisqm使用表鎖。行鎖,最大程度地支援併發處理,但是也帶來了最大的鎖開銷,innodb實現行級鎖。
mysql事務處理:mysql提供事務處理的表引擎,innodb。伺服器層不管理事務,由下層的引擎實現,所以同一個事務中,使用多種儲存引擎不靠譜。在非事務的表上執行事務操作mysql不會發出提醒,也不會報錯。
儲存過程:為以後的使用而儲存的一條或多條nysql語句的集合。儲存過程就是有業務邏輯和流程的集合。
使用場景:通過把處理封裝在容易使用的單元中,簡化複雜的操作,保證資料的一致性。簡化對變動的管理。
觸發器:提供給程式設計師和資料分析員來保證資料完整性的一種方法,它是與表時間相關的特殊的儲存過程。
使用場景:可通過資料庫中的相關表實現級聯更改。實時監控某張表中的某個字元按的更改而需要作出響應的處理,某些業務編號的生成等。如果濫用,就會造成資料庫及應用程式的維護困難。