【问题标题】:How to count rows affected by cascade如何计算受级联影响的行数
【发布时间】:2016-01-26 09:22:10
【问题描述】:

假设我有两个表 A 和 B。 表 B 有一个引用表 A 主键的外键。 并且外键有'on delete cascade'约束。

我也在使用 Java 和 JDBC 来访问这个数据库。

如何知道表 B 中受删除级联约束影响的行数? 我必须在 Java 应用程序中获取号码。 连接对象或其他东西有任何返回它的参数或方法吗?

【问题讨论】:

    标签: java mysql jdbc sql-delete cascading-deletes


    【解决方案1】:

    要遵循 DELETE FROM 语句,您可以使用审计表和 BEFORE DELETE 触发器。

    // change type of deleted_id to your primary key's type.
    create table deleted_audit ( deleted_id BIGINT, dt TIMESTAMP, count INT );
    
    DELIMITER $$
    
    CREATE TRIGGER count_deleted BEFORE delete ON a 
    FOR EACH ROW 
    BEGIN
       DECLARE count_items INT;
       SELECT count(*) FROM b WHERE a_id=OLD.id INTO count_items;
       INSERT INTO deleted_audit VALUES( OLD.id, NOW(), count_items);
    END; $$
    
    DELIMITER ;
    

    【讨论】:

    • 所以,通过这种方式,我需要另一个查询来获取受影响的行数。我说的对吗?
    • @alegro 是的,您需要另一个查询。您可以将所有内容包含在事务中。
    猜你喜欢
    • 2014-01-14
    • 2013-08-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-01
    • 1970-01-01
    相关资源
    最近更新 更多