国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 數據庫 > MySQL > 正文

在mysql中update語句返回的結果是什么

2024-07-24 12:32:58
字體:
來源:轉載
供稿:網友
  本篇內容主要講解“mysql中update語句返回的結果是什么”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。

      下面就讓小編來帶大家學習“mysql中update語句返回的結果是什么”吧!mysql中update語句的返回結果:1、當數據庫的url中沒有“useAffectedRows=true”參數時,返回匹配行數;2、當數據庫的url中有“useAffectedRows=true”參數時,返回影響行數。
 
  本教程操作環境:windows10系統、mysql8.0.22版本、Dell G3電腦。
 
  mysql中update語句返回什么
 
  update語句的結果到底是匹配行數?還是影響行數?
 
  先說結果:如果數據庫的url為:jdbc:mysql://gitlab.fzghjx.com:3306/cron則,返回結果為匹配行數(Rows matched)。
 
  若為:jdbc:mysql://gitlab.fzghjx.com:3306/cron?useAffectedRows=true則返回的是影響行數(Changed)。
 
  綜上:如果url中沒有  useAffectedRows=true  這個參數,則返回的是匹配行數。如果有,則返回的是影響行數。
 
  如何讓其返回值為受影響(changed)的記錄數呢?只需在mysql數據連接url參數加useAffectedRows=true即可
 
  jdbc.url=jdbc:mysql://localhost:3306/ssm?useAffectedRows=true
 
  我寫了一個簡單的jdbc查詢:
 
  1,建立Connection
 
  根據源碼,追蹤,在mysql建立connection的時候,會將useAffectedRows=true這個參數設置為connection的屬性。
 
  在
 
  Connection connection = DriverManager.getConnection("jdbc:mysql://gitlab.fzghjx.com:3306/cron?useAffectedRows=true", "root", "root");
 
  往下追蹤:
 
  繼續:connect方法為:java.sql.Driver#connect,實現為:com.mysql.jdbc.NonRegisteringDriver#connect

  useAffectedRows=true就是在com.mysql.jdbc.NonRegisteringDriver#parseURL方法中讀取,并設置到  Properties props中去的。
 
  再往下:com.mysql.jdbc.ConnectionImpl#getInstance獲取connectiong的實例
 
  這里是一個反射,args為  JDBC_4_CONNECTION_CTOR   用到的是JDBC的構造函數:
 
  JDBC的構造函數,是:
 
  public JDBC4Connection(String hostToConnectTo, int portToConnectTo, Properties info, String databaseToConnectTo, String url) throws SQLException {
 
      super(hostToConnectTo, portToConnectTo, info, databaseToConnectTo, url);
 
  }
 
  往上找,是ConnectionImp的構造函數:
 
  (順便提一句:這里設置了事務的隔離級別為2,讀已提交)
 
  在這個構造函數里,將  useAffectedRows的值初始化到connection中去了:
 
  這里有206個屬性要設置,useAffectedRows排在190位(不同的mysql-connect-java版本,位置不一樣)。
 
  2,與msyql服務器握手連接
 
  連接IO過程,其實就是創建一個MysqlIO,然后開始握手:
 
  重點來了:在doHandshake方法中,設置了useAffectedRows的選項:(com.mysql.jdbc.MysqlIO#doHandshake)
 
  這個CLIENT_FOUND_ROWS的值為:
 
  也就是低位的倒數第二位的值進行或操作。如果useAffectsRows,則不會進行或操作。
 
  設置完之后,通過mysqlOutput的socket發送給mysql 服務器:
 
  mysqlOutput來源:在MysqlIO構建的時候創建的。
 
  ok,這是一個簡單的過程。接下來,來看tcp的報文:
 
  3,報文分析:
 
  useAffectedRows=true時:
 
  發送請求給mysql服務器:
 
  mysql服務器的響應:
 
  useAffectedRows=false時:
 
  發送請求給mysql服務器:
 
  mysql服務器的響應:
 
  從以上報文可以看出,useAffectedRows為true和false時,msyql服務器的返回值是不同的。最后jdbc取的返回結果,就是報文中,Affected Rows的值 。直接從msyql的結果中獲取,jdbc只是對結果進行了一些解析和過濾。由此證明,最開始的猜想是錯的。
 
  到此,相信大家對“mysql中update語句返回的結果是什么”有了更深的了解,不妨來實際操作一番吧!
 

(編輯:武林網)

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 台中县| 常山县| 克东县| 张北县| 钦州市| 灵川县| 霍州市| 莒南县| 西盟| 始兴县| 镇远县| 武鸣县| 衢州市| 凯里市| 钦州市| 汶川县| 黄冈市| 子长县| 泸定县| 新宁县| 宾川县| 苗栗县| 齐齐哈尔市| 昭通市| 名山县| 临朐县| 景泰县| 荃湾区| 台前县| 沽源县| 江达县| 囊谦县| 龙井市| 鄂温| 泊头市| 满城县| 丰顺县| 白山市| 龙泉市| 雷山县| 乌什县|