You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在MySQL Stored Procedure中打印各表删除操作的affected rows

MySQL存储过程获取单步删除操作影响行数的实现方法

核心实现原理

MySQL 提供内置的ROW_COUNT()函数,会返回上一条DML操作(INSERT/UPDATE/DELETE)影响的行数,每次执行完DELETE语句后立刻调用该函数就能拿到对应表的删除行数。
普通调试场景直接用SELECT语句输出结果即可,不需要额外依赖。

完整示例代码

DELIMITER //

CREATE PROCEDURE DeleteRelatedData(IN input_id INT)
BEGIN
    -- 定义变量存储每张表的影响行数
    DECLARE affected_table1 INT DEFAULT 0;
    DECLARE affected_table2 INT DEFAULT 0;
    DECLARE affected_table3 INT DEFAULT 0;

    -- 删除第一张关联表数据
    DELETE FROM table_1 WHERE relate_id = input_id;
    -- 立刻获取当前DELETE操作的影响行数
    SET affected_table1 = ROW_COUNT();

    -- 删除第二张关联表数据
    DELETE FROM table_2 WHERE relate_id = input_id;
    SET affected_table2 = ROW_COUNT();

    -- 删除第三张关联表数据
    DELETE FROM table_3 WHERE parent_id = input_id;
    SET affected_table3 = ROW_COUNT();

    -- 输出所有表的影响行数结果
    SELECT 
        'table_1' AS table_name,
        affected_table1 AS deleted_rows
    UNION ALL
    SELECT 
        'table_2' AS table_name,
        affected_table2 AS deleted_rows
    UNION ALL
    SELECT 
        'table_3' AS table_name,
        affected_table3 AS deleted_rows;
END //

DELIMITER ;

调用方式

直接调用存储过程就会返回结果集,展示每张表删除的行数:

CALL DeleteRelatedData(1001);

注意事项

  • 必须在DELETE语句执行后立刻调用ROW_COUNT(),中间如果执行了其他语句(比如SELECT、SET操作),ROW_COUNT()的结果会被覆盖
  • 如果删除条件匹配不到数据,ROW_COUNT()会返回0,不会抛出异常,符合业务统计的预期
  • 如果需要留存操作记录,拿到影响行数值后可直接插入到自定义的操作日志表中
  • MySQL 5.7及以上版本也可以用PRINT语句将结果输出到服务端错误日志,日常调试场景直接返回结果集更直观

内容的提问来源于stack exchange,提问作者user14079292

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 14:57:03