InnoDB是MySQL的資料庫引擎之一,現(xiàn)在是MySQL的預(yù)設(shè)儲(chǔ)存引擎,為MySQL AB發(fā)布binary的標(biāo)準(zhǔn)之一;InnoDB採用雙軌制授權(quán),一個(gè)是GPL授權(quán),另一個(gè)是專有軟體授權(quán)。 InnoDB是事務(wù)型資料庫的首選引擎,支援事務(wù)安全表(ACID);InnoDB支援行級(jí)鎖,行級(jí)鎖可以最大程度的支援並發(fā),行級(jí)鎖是由儲(chǔ)存引擎層實(shí)現(xiàn)的。
本教學(xué)操作環(huán)境:windows7系統(tǒng)、mysql8版本、Dell G3電腦。
如果想看自己的資料庫預(yù)設(shè)使用的那個(gè)儲(chǔ)存引擎,可以透過使用指令SHOW VARIABLES LIKE 'storage_engine';
一、InnoDB儲(chǔ)存引擎
InnoDB,是MySQL的資料庫引擎之一,現(xiàn)在是MySQL的預(yù)設(shè)儲(chǔ)存引擎,並為MySQL AB發(fā)布binary的標(biāo)準(zhǔn)之一。 InnoDB由Innobase Oy公司所開發(fā),2006年五月時(shí)由甲骨文公司併購。與傳統(tǒng)的ISAM與MyISAM相比,InnoDB的最大特色就是支援了ACID相容的事務(wù)(Transaction)功能,類似PostgreSQL。
InnoDB採用雙軌制授權(quán),一個(gè)是GPL授權(quán),另一個(gè)是專有軟體授權(quán)。
1、InnoDB是事務(wù)型資料庫的首選引擎,支援事務(wù)安全表(ACID)
交易的ACID屬性:即原子性、一致性、隔離性、持久性
?????????????????????????要回滾到事務(wù)開始執(zhí)行的地方。
?????????????????????????????redred#p##redpo
##redpo
#redpo#-red系統(tǒng)的主要日誌。事務(wù)是一組SQL語句,裡面有選擇,查詢、刪除等功能。每條語句執(zhí)行會(huì)有一個(gè)節(jié)點(diǎn)。例如,刪除語句執(zhí)行後,在事務(wù)中有個(gè)記錄保存下來,這個(gè)記錄中儲(chǔ)存了我們什麼時(shí)候做了什麼事。如果出錯(cuò)了,就會(huì)回滾到原來的位置,redo裡面已經(jīng)儲(chǔ)存了我做過什麼事了,然後逆向執(zhí)行一遍就可以了。
??????????????????????????????(eg:例如A向B轉(zhuǎn)賬,不可能A扣了錢,B卻沒有收到)
???????????????????同一數(shù)據(jù),彼此沒有任何干擾;
##??????????????????????????????為一個(gè)事務(wù)正在多次修改某個(gè)數(shù)據(jù),而在這個(gè)事務(wù)中這多次的修改都還未提交,這時(shí)一個(gè)並發(fā)的事務(wù)來訪問該數(shù)據(jù),就會(huì)造成兩個(gè)事務(wù)得到的數(shù)據(jù)不一致);(讀取了另一個(gè)事務(wù)未提交的髒資料)
?????????????????????個(gè)數(shù)據(jù),一個(gè)事務(wù)範(fàn)圍內(nèi)多次查詢卻返回了不同的數(shù)據(jù)值,這是由於在查詢間隔,被另一個(gè)事務(wù)修改並提交了;(讀取了前一個(gè)事務(wù)提交的數(shù)據(jù),查詢的都是同一個(gè)資料項(xiàng))
??????????????????????????????所產(chǎn)的非學(xué)習(xí)現(xiàn)象(非重複閱讀」的一個(gè)非重複讀寫:虛讀為獨(dú)立時(shí)所讀的行為表(11121121221212萬元:假讀)中所產(chǎn)生的一種獨(dú)立行為:一個(gè)獨(dú)立的動(dòng)作。的某個(gè)資料項(xiàng)做了從「1」修改為「2」的操作,這時(shí)事務(wù)T2又對(duì)這個(gè)表中插入了一行資料項(xiàng),而這個(gè)資料項(xiàng)的數(shù)值還是為「1」並且提交給資料庫。而操作事務(wù)T1的使用者如果再查看剛剛修改的數(shù)據(jù),會(huì)發(fā)現(xiàn)還有一行沒有修改,其實(shí)這行是從事務(wù)T2中添加的,就好像產(chǎn)生幻覺一樣 );(讀取了前一個(gè)事務(wù)提交的數(shù)據(jù),針對(duì)一批數(shù)據(jù)整體)##???????????????:交易完成後,交易對(duì)資料庫的所有更新將被保存到資料庫,不能回滾 MySQL資料庫提供給我們的四個(gè)隔離等級(jí): b、Repeatable read(可重複讀):可避免髒讀、不可重複讀的發(fā)生; 鎖定 類型:共享鎖定(讀鎖)、獨(dú)佔(zhàn)鎖定(寫入鎖定) ? ?????????????? ??????鎖的力度:表級(jí)鎖(開銷小、並發(fā)性低),通常在服務(wù)器層實(shí)現(xiàn)????????????????????????????????? ? 行級(jí)鎖(開銷大、並發(fā)性高) ,只會(huì)在儲(chǔ)存引擎層面進(jìn)行實(shí)作 #5、InnoDB儲(chǔ)存引擎完全與MySQL伺服器整合,InnoDB儲(chǔ)存引擎為在主記憶體中緩存數(shù)據(jù)和索引而維持它自己的緩衝池。 InnoDB將它的表和索引在一個(gè)邏輯表空間中,表空間可以包含幾個(gè)檔案(或原始磁碟檔案); 6、InnoDB支援外鍵完整性約束,儲(chǔ)存表中的資料時(shí),每張表的儲(chǔ)存都會(huì)依照主鍵順序存放,如果沒有顯示在表定義時(shí)指定主鍵。 InnoDB會(huì)為每一行產(chǎn)生一個(gè)6位元組的ROWID,並以此作為主鍵 #7、InnoDB被用在眾多需要高效能的大型資料庫網(wǎng)站上 8、InnoDB中不保存表格的行數(shù)(eg:select count(*)from table時(shí),InnoDB需要掃描一遍整個(gè)表來計(jì)算有多少行);清空整個(gè)表時(shí),InnoDB是一行一行的刪除,效率非常慢; InnoDB不建立目錄,使用InnoDB時(shí),MySQL將在MySQL資料目錄下建立一個(gè)名為ibdata1的10MB大小的自動(dòng)擴(kuò)充資料文件,以及兩個(gè)名為ib_logfile0和ib_logfile1的5MB大小的日誌檔案 #二、InnoDB引擎的底層實(shí)作 InnoDB的儲(chǔ)存檔案有兩個(gè),後綴名分別是 .frm和 .idb;其中 .frm是表格的定義文件, .idb是表格的資料檔案。 1、InnoDB引擎採用B Tree結(jié)構(gòu)來作為索引結(jié)構(gòu) B-Tree(平衡多路尋找樹):為磁碟等外儲(chǔ)存裝置設(shè)計(jì)的一種平衡查找樹 系統(tǒng)從磁碟讀取資料到記憶體時(shí)是以磁碟區(qū)塊位基本單位的,位於同一磁碟區(qū)塊中的資料會(huì)被一次性讀取出來,而不是按需讀取。 InnoDB儲(chǔ)存引擎使用頁面作為資料讀取單位,頁面是其磁碟管理的最小單位,預(yù)設(shè)page大小是16k. 系統(tǒng)的一個(gè)磁碟區(qū)塊的儲(chǔ)存空間往往沒有那麼大,因此InnoDB每次申請(qǐng)磁碟空間時(shí)都會(huì)是若干位址連續(xù)磁碟區(qū)塊來達(dá)到頁的大小16KB。 InnoDB在把磁碟資料讀入磁碟時(shí)會(huì)以頁為基本單位,在查詢資料時(shí),如果一個(gè)頁中的每個(gè)資料都能助於定位資料記錄的位置,這將會(huì)減少磁碟I/O的次數(shù),提高查詢效率。 B-Tree結(jié)構(gòu)的資料可以讓系統(tǒng)高效的找到資料所在的磁碟區(qū)塊 ##B-Tree中的每個(gè)節(jié)點(diǎn)根據(jù)實(shí)際情況可以包含大量的關(guān)鍵字資訊和分支,例如: #每個(gè)節(jié)點(diǎn)佔(zhàn)用一個(gè)磁碟區(qū)的磁碟空間,一個(gè)節(jié)點(diǎn)上有兩個(gè)升序排序的關(guān)鍵字和三個(gè)指向子樹根節(jié)點(diǎn)的指針,指針儲(chǔ)存的是子節(jié)點(diǎn)所在磁碟塊的位址。 以根節(jié)點(diǎn)為例,關(guān)鍵字為17和35,P1指標(biāo)指向的子樹的資料範(fàn)圍小於17,P2指標(biāo)指向的子樹的資料範(fàn)圍為17----35,P3指標(biāo)指向的子樹的資料範(fàn)圍大於35; 尋找#關(guān)鍵字29的過程: a.根據(jù)根節(jié)點(diǎn)找到磁碟區(qū)塊1,讀入記憶體。 【磁碟I/O操作第一次】 b.比較關(guān)鍵字29在區(qū)間(17,35),找到磁碟區(qū)塊1的指標(biāo)P2; c.根據(jù)P2指標(biāo)找到磁碟區(qū)塊3,讀入記憶體。 【磁碟I/O操作第二次】 d.比較關(guān)鍵字29在區(qū)間(26,30),找到磁碟區(qū)塊3的指標(biāo)P2; e.根據(jù)P2指標(biāo)找到磁碟區(qū)塊8,讀入記憶體。 【磁碟I/O操作第三次】 f.在磁碟區(qū)塊8中的關(guān)鍵字清單中找到關(guān)鍵字29. MySQL的InnoDB儲(chǔ)存引擎在設(shè)計(jì)時(shí)是將根節(jié)點(diǎn)常駐記憶體的,因此力求達(dá)到樹的深度不超過3,也就是I/O不需要超過三次;
B Tree 在B Tree中所有資料記錄節(jié)點(diǎn)都是按照鍵值大小順序存放在同一層的葉子節(jié)點(diǎn)上,而非葉子節(jié)點(diǎn)上只儲(chǔ)存key值信息,這樣可以大大增加每個(gè)節(jié)點(diǎn)儲(chǔ)存的key值數(shù)量,降低B Tree的高度; B Tree在B-Tree的基礎(chǔ)上有兩點(diǎn)變化: #( 1)資料為存在葉子節(jié)點(diǎn)中的 由於B Tree的非葉子節(jié)點(diǎn)只儲(chǔ)存鍵值訊息,假設(shè)每個(gè)磁碟區(qū)塊能儲(chǔ)存4個(gè)鍵值及指標(biāo)訊息,則變成B Tree後其結(jié)構(gòu)如下圖所示: 通常在B Tree上有兩個(gè)頭指針,一個(gè)指向根節(jié)點(diǎn),另一個(gè)指向關(guān)鍵字最小的葉子節(jié)點(diǎn),而且所有葉子節(jié)點(diǎn)(即資料節(jié)點(diǎn))之間都是一種鍊式環(huán)結(jié)構(gòu)。 因此可以對(duì)B Tree進(jìn)行兩種查找運(yùn)算,一種是對(duì)於主鍵的範(fàn)圍查找和分頁查找,另一種是從根節(jié)點(diǎn)開始,進(jìn)行隨機(jī)查找。 InnoDB中的B Tree #InnoDB是以ID為索引的資料儲(chǔ)存 採用InnoDB引擎的資料儲(chǔ)存檔案有兩個(gè),一個(gè)定義文件,一個(gè)是資料檔案。 InnoDB透過B Tree結(jié)構(gòu)對(duì)ID建立索引,然後在葉子節(jié)點(diǎn)中儲(chǔ)存記錄 ##若建立索引的欄位不是主鍵ID,則對(duì)該欄位建立索引,然後在葉子節(jié)點(diǎn)中儲(chǔ)存的是該記錄的主鍵,然後透過主鍵索引找到對(duì)應(yīng)記錄 mysql影片教學(xué)】
4、InnoDB是為處理龐大資料量的最大效能設(shè)計(jì)。它的CPU效率可能是任何基於磁碟的關(guān)係型資料庫引擎所不能匹敵的
以上是mysql innodb是什麼的詳細(xì)內(nèi)容。更多資訊請(qǐng)關(guān)注PHP中文網(wǎng)其他相關(guān)文章!

熱AI工具

Undress AI Tool
免費(fèi)脫衣圖片

Undresser.AI Undress
人工智慧驅(qū)動(dòng)的應(yīng)用程序,用於創(chuàng)建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費(fèi)的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費(fèi)的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強(qiáng)大的PHP整合開發(fā)環(huán)境

Dreamweaver CS6
視覺化網(wǎng)頁開發(fā)工具

SublimeText3 Mac版
神級(jí)程式碼編輯軟體(SublimeText3)

1.PHP開發(fā)問答社區(qū)首選Laravel MySQL Vue/React組合,因生態(tài)成熟、開發(fā)效率高;2.高性能需依賴緩存(Redis)、數(shù)據(jù)庫優(yōu)化、CDN和異步隊(duì)列;3.安全性必須做好輸入過濾、CSRF防護(hù)、HTTPS、密碼加密及權(quán)限控制;4.變現(xiàn)可選廣告、會(huì)員訂閱、打賞、傭金、知識(shí)付費(fèi)等模式,核心是匹配社區(qū)調(diào)性和用戶需求。

PHP設(shè)置環(huán)境變量主要有三種方式:1.通過php.ini全局配置;2.通過Web服務(wù)器(如Apache的SetEnv或Nginx的fastcgi_param)傳遞;3.在PHP腳本中使用putenv()函數(shù)。其中,php.ini適用於全局且不常變的配置,Web服務(wù)器配置適用於需要隔離的場(chǎng)景,putenv()適用於臨時(shí)性的變量。持久化策略包括配置文件(如php.ini或Web服務(wù)器配置)、.env文件配合dotenv庫加載、CI/CD流程中動(dòng)態(tài)注入變量。安全管理敏感信息應(yīng)避免硬編碼,推薦使用.en

要實(shí)現(xiàn)MySQL部署自動(dòng)化,關(guān)鍵在於選用Terraform定義資源、Ansible管理配置、Git進(jìn)行版本控制,並強(qiáng)化安全與權(quán)限管理。 1.使用Terraform定義MySQL實(shí)例,如AWSRDS的版本、類型、訪問控制等資源屬性;2.通過AnsiblePlaybook實(shí)現(xiàn)數(shù)據(jù)庫用戶創(chuàng)建、權(quán)限設(shè)置等細(xì)節(jié)配置;3.所有配置文件納入Git管理,支持變更追蹤與協(xié)作開發(fā);4.避免硬編碼敏感信息,使用Vault或AnsibleVault管理密碼,並設(shè)置訪問控制與最小權(quán)限原則。

收集用戶行為數(shù)據(jù)需通過PHP記錄瀏覽、搜索、購買等信息至數(shù)據(jù)庫,並清洗分析以挖掘興趣偏好;2.推薦算法選擇應(yīng)根據(jù)數(shù)據(jù)特徵決定:基於內(nèi)容、協(xié)同過濾、規(guī)則或混合推薦;3.協(xié)同過濾在PHP中可實(shí)現(xiàn)為計(jì)算用戶餘弦相似度、選K近鄰、加權(quán)預(yù)測(cè)評(píng)分並推薦高分商品;4.性能評(píng)估用準(zhǔn)確率、召回率、F1值及CTR、轉(zhuǎn)化率並通過A/B測(cè)試驗(yàn)證效果;5.冷啟動(dòng)問題可通過商品屬性、用戶註冊(cè)信息、熱門推薦和專家評(píng)價(jià)緩解;6.性能優(yōu)化手段包括緩存推薦結(jié)果、異步處理、分佈式計(jì)算與SQL查詢優(yōu)化,從而提升推薦效率與用戶體驗(yàn)。

PHP在智能客服中扮演連接器和大腦中樞角色,負(fù)責(zé)串聯(lián)前端輸入、數(shù)據(jù)庫存儲(chǔ)與外部AI服務(wù);2.實(shí)現(xiàn)時(shí)需構(gòu)建多層架構(gòu):前端接收用戶消息,PHP後端預(yù)處理並路由請(qǐng)求,先匹配本地知識(shí)庫,未命中則調(diào)用外部AI服務(wù)如OpenAI或Dialogflow獲取智能回復(fù);3.會(huì)話管理由PHP寫入MySQL等數(shù)據(jù)庫,保障上下文連續(xù)性;4.集成AI服務(wù)需用Guzzle發(fā)送HTTP請(qǐng)求,安全存儲(chǔ)APIKey,做好錯(cuò)誤處理與響應(yīng)解析;5.數(shù)據(jù)庫設(shè)計(jì)需包含會(huì)話、消息、知識(shí)庫、用戶表,合理建索引、保障安全與性能,支撐機(jī)器人記憶

要使用REVOKE回收MySQL用戶權(quán)限,需按格式指定權(quán)限類型、數(shù)據(jù)庫和用戶。 1.回收全部權(quán)限用REVOKEALLPRIVILEGES,GRANTOPTIONFROM'用戶名'@'主機(jī)名';2.回收特定數(shù)據(jù)庫權(quán)限用REVOKEALLPRIVILEGESONmydb.FROM'用戶名'@'主機(jī)名';3.回收全局權(quán)限用REVOKE權(quán)限類型ON.*FROM'用戶名'@'主機(jī)名';注意執(zhí)行後建議刷新權(quán)限,權(quán)限範(fàn)圍需與授權(quán)時(shí)一致,且不能回收不存在的權(quán)限。

選擇合適的PHP框架需根據(jù)項(xiàng)目需求綜合考慮:Laravel適合快速開發(fā),提供EloquentORM和Blade模板引擎,便於數(shù)據(jù)庫操作和動(dòng)態(tài)表單渲染;Symfony更靈活,適合複雜系統(tǒng);CodeIgniter輕量,適用於對(duì)性能要求較高的簡(jiǎn)單應(yīng)用。 2.確保AI模型準(zhǔn)確性需從高質(zhì)量數(shù)據(jù)訓(xùn)練、合理選擇評(píng)估指標(biāo)(如準(zhǔn)確率、召回率、F1值)、定期性能評(píng)估與模型調(diào)優(yōu)入手,並通過單元測(cè)試和集成測(cè)試保障代碼質(zhì)量,同時(shí)持續(xù)監(jiān)控輸入數(shù)據(jù)以防止數(shù)據(jù)漂移。 3.保護(hù)用戶隱私需採取多項(xiàng)措施:對(duì)敏感數(shù)據(jù)進(jìn)行加密存儲(chǔ)(如AES

為什麼需要SSL/TLS加密MySQL連接?因?yàn)椴患用艿倪B接可能導(dǎo)致敏感數(shù)據(jù)被截取,啟用SSL/TLS可防止中間人攻擊並滿足合規(guī)要求;2.如何為MySQL配置SSL/TLS?需生成證書和私鑰,修改配置文件指定ssl-ca、ssl-cert和ssl-key路徑並重啟服務(wù);3.客戶端連接時(shí)如何強(qiáng)制使用SSL?通過創(chuàng)建用戶時(shí)指定REQUIRESSL或REQUIREX509實(shí)現(xiàn);4.SSL配置容易忽略的細(xì)節(jié)包括證書路徑權(quán)限、證書過期問題以及客戶端配置需求。
