關於外鍵是什么,具體不再詳述,可以自行百度。
講一下關於外鍵的
On Delete和On Update的使用
最近在項目的表中看到這些,不懂順便查了查:
ONSTRAINT "c_clusters_pkey" PRIMARY KEY ("cluster_id"), CONSTRAINT "c_clusters_zabbix_group_id_fkey" FOREIGN KEY ("zabbix_group_id") REFERENCES "public"."groups" ("groupid") ON DELETE NO ACTION ON UPDATE NO ACTION ALTER TABLE "public"."c_clusters" OWNER TO "postgres"; CREATE UNIQUE INDEX "clusters_cluster_id_key" ON "public"."c_clusters" USING btree (cluster_id);
其中關於
ON DELETE NO ACTION ON UPDATE NO ACTION
On Delete和On Update都有Restrict,No Action, Cascade,Set Null屬性。現在分別對他們的屬性含義做個解釋。
- ON DELETE
restrict(約束):當在父表(即外鍵的來源表)中刪除對應記錄時,首先檢查該記錄是否有對應外鍵,如果有則不允許刪除。
no action:意思同restrict.即如果存在從數據,不允許刪除主數據。
cascade(級聯):當在父表(即外鍵的來源表)中刪除對應記錄時,首先檢查該記錄是否有對應外鍵,如果有則也刪除外鍵在子表(即包含外鍵的表)中的記錄。
set null:當在父表(即外鍵的來源表)中刪除對應記錄時,首先檢查該記錄是否有對應外鍵,如果有則設置子表中該外鍵值為null(不過這就要求該外鍵允許取null)
- ON UPDATE
restrict(約束):當在父表(即外鍵的來源表)中更新對應記錄時,首先檢查該記錄是否有對應外鍵,如果有則不允許更新。
no action:意思同restrict.
cascade(級聯):當在父表(即外鍵的來源表)中更新對應記錄時,首先檢查該記錄是否有對應外鍵,如果有則也更新外鍵在子表(即包含外鍵的表)中的記錄。
set null:當在父表(即外鍵的來源表)中更新對應記錄時,首先檢查該記錄是否有對應外鍵,如果有則設置子表中該外鍵值為null(不過這就要求該外鍵允許取null)。
注:NO ACTION和RESTRICT的區別:只有在及個別的情況下會導致區別,前者是在其他約束的動作之后執行,后者具有最高的優先權執行。