2015-01-16 6 views
0

Я использую внешний ключ для моих таблиц:Использование внешнего ключа двустороннего действия

Таблица A

----------------------------------------- 
id | name | type | date 
----------------------------------------- 
1  |test.jpg |image/jpg| 2015-01-15 
2  |test2.jpg|image/jpg| 2015-01-15 
3  |test3.jpg|image/jpg| 2015-01-15 

и Таблица B

----------------------------------------- 
id | title | file_id | date 
----------------------------------------- 
1  |News 1 |1  | 2015-01-15 
2  |News 2 |2  | 2015-01-15 
3  |News 3 |3  | 2015-01-15 

это мой внешний ключ для Таблица B:

CONSTRAINT `news_ibfk_1` FOREIGN KEY (`file_id`) REFERENCES `Table A` (`id`) ON UPDATE NO ACTION 

Теперь все в порядке, я хочу знать, есть ли способ сказать, если удалить одну запись из Table Bfile_id запись удалить из Table A?

ответ

0

Поэтому я понимаю, что «TableA.id» является родительским элементом «TableB.file_id».

В этом случае вы можете только удалить что-либо из «TableA.id», нет детей. Также значение из «TableB.file_id» должно существовать в «TableA.id».

Что вы можете сделать, это поместить триггер на «TableB», который активируется, когда удаление выполнено. Затем вы можете посмотреть, используется ли значение «TableB.file_id» из удаленной вами строки в «TableB.file_id». Если это не так, то вы можете удалить его из «TableA».

Вот ссылка о триггерах: Triggers

Я думаю, что это вам нужно использовать «после удаления триггера». Что-то вроде этого:

CREATE OR REPLACE TRIGGER trName 
AFTER DELETE ON TableB 

BEGIN 
    <look if any values from "TableA.id" are not used anymore in "TableB.file_id"> 
    <if that is the case, do a DELETE on that "TableA.id" line> 
END; 
/
Смежные вопросы