日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

mysql pdo 获取最后一条sql_一条SQL如何在MYSQL中执行的

發布時間:2025/4/16 数据库 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 mysql pdo 获取最后一条sql_一条SQL如何在MYSQL中执行的 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

mysql主要分為Server層和存儲引擎層

Server層:主要包括連接器、查詢緩存、分析器、優化器、執行器等;所有跨引擎的功能都包含在這里面,如存儲過程、觸發器、視圖、函數及通用日志模板binglog日志模塊。

存儲引擎層:負責數據的存儲及讀取,采用拔插式架構。目前默認InnoDB引擎。

server層主要包括

連接器:身份認證(登錄mysql用);

查詢緩存:執行查詢語句的時候,會先執行查詢緩存(在新的8.0版本已經被移除);

分析器:沒有命中緩存的話,SQL語句會經過分析器,分析器會先檢查sql詞法分析提取關鍵字,然后再語法分析是否正確;

優化器:mysql認為最優方案執行;

執行器:執行sql,并從存儲引擎返回數據。

查詢語句分析

select * from person where age = 18 and name ='flink';

先檢查該語句是否有權限,如果沒有權限,直接返回錯誤。若有權限8.0版本前會先查詢緩存;

第二步通過分析器進行詞法分析,獲取sql語句關鍵字,如上語句的select,提取需要查詢的表person,需要查詢所有列,查詢條件age=18 , 然后判斷這個語句是否有語法錯誤;

接下來是優化器進行確定執行方案,優化器會根據自己的優化算法選擇一個最優方案執行。如果是先查出age=18,然后判斷name='flink';還是先查詢name='flink',還是再查詢age=18;

最后進行權限校驗,并返回引擎的執行結果。

更新語句分析

update person set age=20 where name='flink';

先查詢到這條數據;

然后拿到查詢語句,把age改成20,然后調用引擎API,寫入這一行數據,InnoDB引擎把數據保存在內存中,同時記錄redo log 且 這時redo log馬上進入prepare狀態,然后告訴執行器,執行完成可以提交。

執行器收到通知后記錄binlog,然后調用引擎接口,提交redo log為提交狀態。

完成更新。

為什么有2個日志模塊

由于最初mysql并沒有InnoDB引擎,后來收購后以插件方式加入mysql中,redo log是InnoDB獨有的能保證數據庫異常后之前提交的記錄不丟失,mysql自帶的binlog日志只用來歸檔。

redo log與binlog這2個日志模塊如何分工協作

mysql在處理過程中保證數據完整性:

先判斷redo log中數據是否完整,如果判斷完整,就立即提交。

如果redo log只是預提交但是不是commit狀態,這個時候就去判斷binlog是否完整,如果也是完整的就會提交redo log,如果不完整就會執行回滾事務。

如上可以解決數據一致性問題。

總結

以上是生活随笔為你收集整理的mysql pdo 获取最后一条sql_一条SQL如何在MYSQL中执行的的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。