2016-01-26 5 views
1

Предположим, у меня есть две таблицы A и B. Таблица B имеет внешний ключ, который ссылается на первичный ключ таблицы A. И внешний ключ имеет ограничение «на удаление каскада».Как подсчитать строки, затронутые каскадом

И я также использую Java и JDBC для доступа к этой базе данных.

Как узнать количество строк таблицы B, связанных с ограничением каскада delete? Мне нужно получить номер в приложении Java. Имеет ли объект соединения или что-то еще параметр или метод, который возвращает его?

ответ

1

Чтобы следовать за инструкцией DELETE FROM, вы можете использовать таблицу аудита и триггер ДО 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

Смежные вопросы