首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> MySQL 資料庫 >> MySQL 綜合教學

MySQL 影響行數函數實測:ROW_COUNT() 與 FOUND_ROWS() 正確用法

     編輯:MySQL 綜合教學

兩大核心函數

函數適用操作說明
ROW_COUNT()INSERT / UPDATE / DELETE返回上一條修改類語句影響的行數
FOUND_ROWS()SELECT返回上一條 SELECT 查詢的行數(配合 SQL_CALC_FOUND_ROWS)

完整測試腳本

DROP DATABASE IF EXISTS mytest;
CREATE DATABASE mytest;
USE mytest;

DROP TABLE IF EXISTS MyTestTable;
CREATE TABLE MyTestTable (ID INT, Name VARCHAR(10));

-- 插入 3 筆測試資料
INSERT INTO MyTestTable (ID, Name)
SELECT '1','role1' UNION ALL
SELECT '2','role2' UNION ALL
SELECT '3','role3';

SELECT ROW_COUNT();  -- 輸出 3(UNION ALL 批次插入返回實際行數)
-- 注意:INSERT ... VALUES 單行僅返回 1

SELECT * FROM MyTestTable;
SELECT FOUND_ROWS();  -- 輸出 3

UPDATE MyTestTable SET Name = 'people';
SELECT ROW_COUNT();  -- 輸出 3

DELETE FROM MyTestTable;
SELECT ROW_COUNT();  -- 輸出 3

關鍵行為差異

語句類型ROW_COUNT()FOUND_ROWS()
INSERT ... VALUES (單行)1N/A
INSERT ... SELECT / UNION ALL實際插入行數N/A
UPDATE實際修改行數N/A
DELETE實際刪除行數N/A
SELECT-1(無意義)查詢行數
無前置 DML/查詢-10

進階應用:預存程序中判斷執行結果

CREATE PROCEDURE batch_insert()
BEGIN
  INSERT INTO log (msg) VALUES ('test');
  IF ROW_COUNT() = 1 THEN
    SELECT 'SUCCESS';
  ELSE
    SELECT 'FAILED';
  END IF;
END;

常見誤區

  • ❌ 以為 ROW_COUNT() 對 SELECT 有效 → 實際返回 -1
  • ❌ 以為 FOUND_ROWS() 對 UPDATE 有效 → 實際返回 0
  • ❌ 獨立呼叫函數未緊跟目標語句 → 返回預設值(-1/0)
  • ✅ 必須**緊接著**目標語句呼叫,中間不能有其他語句

PHP/Java 等驅動層替代方案

  • PHP mysqli:$mysqli->affected_rows
  • PDO:$stmt->rowCount()(僅 INSERT/UPDATE/DELETE)
  • JDBC:stmt.getUpdateCount()
  • Python:cursor.rowcount
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved