[英]Can I use select statement with check constraint
我的表是父子表,其中包含兩列。 第一列是ID
,即自動編號。 另一列是ParentID
,具有特殊條件。 如果行是父級,則ParentID = 0
否則它應該與ParentID行相關。 例如:
**ID** | **ParentID**
---------------------
1 0
2 0
3 2
4 [it can be 0 or 1 or 2 NOT 3]
ParentID取決於ID列,如果ID包括ParentID = 0,則ParentID可以是該ID。
問題是我可以這樣做嗎?
constraint ParentID_ck ckeck(ParentID in(0, select ID from table where ParentID = 0;))
或者我應該使用其他解決方案,如PL / SQL:
DECLARE
--Somthing..
BEGIN
--Somthing..
END;
並將其置於檢查約束內。
您需要結合使用外鍵約束和觸發器來實現此約束
您可以使用表中的可歸位外鍵到其自身。 (parentID == null shows the root nodes)
。
對於select ID from table where ParentID = 0 (null)
的部分, select ID from table where ParentID = 0 (null)
約束,您可以使用后插入或更新DML觸發器 ,可以在此處找到一些觸發器示例
你可以這樣做:
insert into TABLE_NAME(PARENT_ID,ID)
(select <THE_PARENT_ID>, <ID> from DUAL where
exists (select 1 from TABLE_NAME where PARENT_ID = <THE_PARENT_ID>))
這樣就不會插入那些實際上不在TABLE_NAME中的PARENT_ID。
您可以先修復數據模型。 你的桌子有兩種實體 - 父母和孩子。 為您的父母創建一個單獨的表,然后您可以使用普通的參考約束。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.