我創建了兩個表,如marks
和users
。我維護兩個表之間的外鍵關係,當我刪除marks
表中的一行時,我需要根據uid
刪除用戶表中的那個特定用戶,這兩個表中都存在這兩個表。最好的方法來刪除兩個表中有外鍵記錄?
回答
如果您希望在父表中刪除相應的行時刪除子表中的行,請使用ON DELETE CASCADE選項。
但是您的情況與此相反。無法自動執行反向 。
您需要明確地使用刪除觸發器,只要記錄從子表中刪除 。
BTW它不是安全地做反向,因爲可能是單個用戶的許多痕跡記錄,如果刪除它們中的任何一個用戶,然後從用戶表中刪除。
我建議在sproc中按邏輯操作。
你可以檢查存儲在用戶表中刪除用戶的所有用戶記錄在標記表中刪除。
那麼對於你的情況,我會建議使用on delete cascade
更多一點:
與級聯外鍵刪除意味着如果在父表中的記錄被刪除,然後在子表中的相應記錄會自動被刪除。這在SQL Server中稱爲級聯刪除。
創建具有級聯外鍵刪除使用CREATE在SQL Server(的Transact-SQL)TABLE語句的語法是:
CREATE TABLE child_table
(
column1 datatype [ NULL | NOT NULL ],
column2 datatype [ NULL | NOT NULL ],
...
CONSTRAINT fk_name
FOREIGN KEY (child_col1, child_col2, ... child_col_n)
REFERENCES parent_table (parent_col1, parent_col2, ... parent_col_n)
ON DELETE CASCADE
[ ON UPDATE { NO ACTION | CASCADE | SET NULL | SET DEFAULT } ]
);
更多閱讀this
不,你不能做那 –
如果我想從asp.net刪除記錄,我如何在sql命令中實現? –
就刪除而言,你可以肯定,但你必須小心,例如,你用uid 1刪除子記錄,然後用uid 1從父表記錄中刪除,可以有更多的子記錄具有uid 1,在這種情況下,它不會允許刪除 –
在設計中只使用在刪除級聯
CREATE TABLE child_table
(
column1 datatype [ NULL | NOT NULL ],
column2 datatype [ NULL | NOT NULL ],
...
CONSTRAINT fk_name
FOREIGN KEY (child_col1, child_col2, ... child_col_n)
REFERENCES parent_table (parent_col1, parent_col2, ... parent_col_n)
ON DELETE CASCADE
[ ON UPDATE { NO ACTION | CASCADE | SET NULL | SET DEFAULT } ]
);
現在當你刪除父。孩子會自動刪除...你不需要做任何事情
檢查鏈接查看詳細 On delete cascade
因爲我不喜歡從相關表DELETE
任何行,我建議你這個解決方案:
- 添加
status
場與您桌的1
默認值。 - 創建一個
VIEW
,該列表僅顯示status <> 0
的行,並使用此VIEW
顯示有效數據。對於父母子女或相關表,只顯示
status <> 0
的父行和子女表,如parent.status * child.status <> 0
。 - [可選&額外] *創建
log
表或爲您的數據庫或表或只是你的重要的表一個journal
和儲存像Create
,Edit\Modify
,Delete
,Undelete
等一些行動。
- 支持
Undo
和Redo
。 - 支持
Undelete
操作! - 不要擔心沒有父母的孩子。
- *發現舊數據,數據變化和許多其他信息。
還有很多其他的好處,你只是存儲更多的數據,它不關心一個良好的RDBMS。
我使用DELETE
只是一個表,它是在最後的孩子點,其數據並不那麼重要。
- 1. 刪除外鍵然後刪除記錄並最終設置外鍵返回是一種很好的做法嗎?
- 2. 防止刪除記錄,有兩個表
- 3. 刪除/截斷有外鍵的表中的記錄
- 4. 使用外鍵約束刪除多個表中的記錄
- 5. mysql的刪除所有記錄刪除外鍵
- 6. 最好的方法,以配合在同一個表中的兩個記錄對
- 7. 如何刪除一個記錄時,兩個表的外鍵互相引用?
- 8. 刪除除一個重複記錄以外的所有記錄
- 9. 從兩個具有外鍵約束的表中刪除
- 10. 刪除有兩個相同的列值的記錄表中的
- 11. 最好的方法來刪除所有特定類型的NSManagedObjects?
- 12. 如何將具有外鍵約束的記錄刪除到另一個表中?
- 13. 根據外鍵刪除條目的最有效方法
- 14. 最好的方法來得知哪個節點在鏈表中被刪除?
- 15. 使用外鍵的最好方法(FK)
- 16. 最好的方法來刪除js數組中的html元素?
- 17. 外鍵從SQL中的一列中的兩個表中刪除
- 18. 刪除除最新5條以外的所有記錄
- 19. 使用連接快速刪除記錄的最有效方法?
- 20. 刪除所有沒有外鍵約束的記錄
- 21. 使用JayData從WebSql/IndexedDb表中刪除所有記錄的最快方法
- 22. 最乾淨的語法來刪除linqtosql中的記錄
- 23. 刪除除記錄中最後7個字符以外的所有內容
- 24. 刪除除了每個字段的最後10個以外的所有記錄
- 25. 休眠:從關聯表中刪除記錄與外鍵
- 26. Django的兩個外鍵唯一記錄
- 27. 有沒有更簡單的方法來刪除列表中的前兩個值?
- 28. SAS刪除sas中除1個重複記錄以外的所有記錄
- 29. 加入到表中有兩個或多個記錄具有相同的外鍵
- 30. 有沒有辦法避免消除刪除在另一個表上的外鍵記錄
我試着像在一個用戶表中列與sid,名稱,pwd,uid(PK)類似,在標記表名稱中的所有主題標記和uid(FK)。如果我試圖刪除基於該uid的標記中的行,我可以刪除用戶表中的記錄? –
[如何使用級聯刪除與SQL Server?](http://stackoverflow.com/questions/6260688/how-do-i-use-cascade-delete-with-sql-server) – har07
可能重複的[使用觸發器來實現參照完整性操作(SQL Server)](http://stackoverflow.com/questions/30086504/using-triggers-to-implement-referential-integrity-actions-sql-server) –