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
擴充知識:
猜想
如果透過cmd操作mysql的update語句,螢幕上顯示其實是這樣的:
#當我想這個問題的時候,第一反應有兩個答案,1,在mysql伺服器的回傳結果中,進行判斷,如果有這個設定為true,則傳回Rows matched的值,如果為false,則傳回Changed的值。 2,在傳回給查詢語句的時候,進行這個值的選擇。
證實
借用一個圖表來說明建立connection的整個過程:
我寫了一個簡單的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的建構函數,是:
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,建立MysqlIO
這裡有一個「高可用」的選項,如果是的話,就會建立一個重試的IO連結。否則,則創建一個只嘗試一次的IO鏈接,失敗了就不會重試。這個選項,也是在url中,透過設定:autoReconnect=true來開啟的。
3,與msyql伺服器握手連接
連接IO過程,其實就是創建一個MysqlIO,然後開始握手:
##這個CLIENT_FOUND_ROWS的值為:
也就是低位的倒數第二位的值進行或運算。如果useAffectsRows,則不會進行
或操作。
設定完之後,透過mysqlOutput的socket傳送給mysql 伺服器:
mysqlOutput來源:在MysqlIO建置的時候建立的。
ok,這是一個簡單的過程。接下來,來看tcp的封包:
4,封包分析:
useAffectedRows=true時:傳送請求給mysql伺服器:
mysql伺服器的回應:
useAffectedRows=false時:
發送請求給mysql伺服器:
##mysql伺服器的回應:
從以上封包可以看出,當useAffectedRows為true和false時,msyql伺服器的回傳值是不同的
。最後jdbc取的回傳結果,就是封包中,Affected Rows的值 。直接從msyql的結果中獲取,jdbc只是對結果進行了一些解析和過濾。由此證明,最開始的猜想是錯的。推薦學習:mysql影片教學
####以上是mysql中update語句回傳什麼的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本篇文章给大家带来了关于mysql的相关知识,其中主要介绍了关于架构原理的相关内容,MySQL Server架构自顶向下大致可以分网络连接层、服务层、存储引擎层和系统文件层,下面一起来看一下,希望对大家有帮助。

在mysql中,可以利用char()和REPLACE()函数来替换换行符;REPLACE()函数可以用新字符串替换列中的换行符,而换行符可使用“char(13)”来表示,语法为“replace(字段名,char(13),'新字符串') ”。

mysql的msi与zip版本的区别:1、zip包含的安装程序是一种主动安装,而msi包含的是被installer所用的安装文件以提交请求的方式安装;2、zip是一种数据压缩和文档存储的文件格式,msi是微软格式的安装包。

方法:1、利用right函数,语法为“update 表名 set 指定字段 = right(指定字段, length(指定字段)-1)...”;2、利用substring函数,语法为“select substring(指定字段,2)..”。

转换方法:1、利用cast函数,语法“select * from 表名 order by cast(字段名 as SIGNED)”;2、利用“select * from 表名 order by CONVERT(字段名,SIGNED)”语句。

本篇文章给大家带来了关于mysql的相关知识,其中主要介绍了关于MySQL复制技术的相关问题,包括了异步复制、半同步复制等等内容,下面一起来看一下,希望对大家有帮助。

本篇文章给大家带来了关于mysql的相关知识,其中主要介绍了mysql高级篇的一些问题,包括了索引是什么、索引底层实现等等问题,下面一起来看一下,希望对大家有帮助。

在mysql中,可以利用REGEXP运算符判断数据是否是数字类型,语法为“String REGEXP '[^0-9.]'”;该运算符是正则表达式的缩写,若数据字符中含有数字时,返回的结果是true,反之返回的结果是false。


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

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

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

MantisBT
Mantis是一個易於部署的基於Web的缺陷追蹤工具,用於幫助產品缺陷追蹤。它需要PHP、MySQL和一個Web伺服器。請查看我們的演示和託管服務。

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

Dreamweaver CS6
視覺化網頁開發工具

mPDF
mPDF是一個PHP庫,可以從UTF-8編碼的HTML產生PDF檔案。原作者Ian Back編寫mPDF以從他的網站上「即時」輸出PDF文件,並處理不同的語言。與原始腳本如HTML2FPDF相比,它的速度較慢,並且在使用Unicode字體時產生的檔案較大,但支援CSS樣式等,並進行了大量增強。支援幾乎所有語言,包括RTL(阿拉伯語和希伯來語)和CJK(中日韓)。支援嵌套的區塊級元素(如P、DIV),

DVWA
Damn Vulnerable Web App (DVWA) 是一個PHP/MySQL的Web應用程序,非常容易受到攻擊。它的主要目標是成為安全專業人員在合法環境中測試自己的技能和工具的輔助工具,幫助Web開發人員更好地理解保護網路應用程式的過程,並幫助教師/學生在課堂環境中教授/學習Web應用程式安全性。 DVWA的目標是透過簡單直接的介面練習一些最常見的Web漏洞,難度各不相同。請注意,該軟體中