2016-01-26 42 views
1

比方說,我有兩個表A和B. 表B有一個引用表A主鍵的外鍵。 而外鍵具有'關於刪除級聯'的約束。如何統計受級聯影響的行

而且我也使用Java和JDBC來訪問這個數據庫。

如何知道受刪除級聯約束影響的表B的行數? 我必須在Java應用程序中獲取數字。 連接對象或東西是否有任何返回它的參數或方法?

回答

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 ; 
+0

所以,通過這種方式,我需要另一個查詢來獲取受影響的行數。我對嗎? – alegro

+0

@alegro是的,你需要另一個查詢。您可以將所有內容包含在交易中。 – olegsv