![](/img/trans.png)
[英]Postgres delete a row if the foreign key's column is set to false
[英]How to delete a row's foreign key when it is deleted?
給出下表:
create table permissions(id identity);
create table companies(id identity,
permission_id bigint not null,
foreign key(permission_id) references permissions(id) on delete cascade);
create table departments(id identity,
company_id bigint not null,
permission_id bigint not null,
foreign key(company_id) references companies(id),
foreign key(permission_id) references permissions(id) on delete cascade);
刪除部門后,我希望以下語句自動執行:
departments
行已刪除 permissions
行被刪除 companies
行被刪除 permissions
行(上一個點)已刪除 問題:
READ_COMMITTED
事務隔離和ON CASCADE DELETE
,則將行作為單個原子語句刪除嗎? 還是將它們作為易受READ_COMMITTED
異常影響的單獨的delete語句執行? 說明:
permissions
構成了關閉表 (例如,用戶具有對公司的許可,而公司具有對部門的許可,因此用戶具有對部門的許可)。 因為層次關系跨越不同的類型(即用戶,公司,部門),所以權限表不能指向特定的類型。 因此,公司/部門必須引用許可,而不是相反。 CASCADE
負責其余工作是不夠的,因為它將刪除部門的權限,部門和公司,但忽略了刪除公司的權限。 companies
行。
permissions
行,但是
ON CASCADE DELETE
它也需要鎖定公司。
它在大多數數據庫中都是原子性的,除了帶有MyISAM的mysql以及MS Access之外,通常您可以使用觸發器來完成您想做的事情,但這很奇怪,因為通常與我們想要的相反,我的意思是當刪除一個權限后,具有該權限的部門也將被刪除
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.