外來鍵的約束(Mysql PostgreSQL)

2022-05-06 15:21:07 字數 1250 閱讀 3158

講一下關於外來鍵的

最近在專案的表中看到這些,不懂順便查了查:

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屬性。現在分別對他們的屬性含義做個解釋。

restrict(約束):當在父表(即外來鍵的**表)中刪除對應記錄時,首先檢查該記錄是否有對應外來鍵,如果有則不允許刪除。

no action:意思同restrict.即如果存在從資料,不允許刪除主資料。

cascade(級聯):當在父表(即外來鍵的**表)中刪除對應記錄時,首先檢查該記錄是否有對應外來鍵,如果有則也刪除外來鍵在子表(即包含外來鍵的表)中的記錄。

set null:當在父表(即外來鍵的**表)中刪除對應記錄時,首先檢查該記錄是否有對應外來鍵,如果有則設定子表中該外鍵值為null(不過這就要求該外來鍵允許取null)

restrict(約束):當在父表(即外來鍵的**表)中更新對應記錄時,首先檢查該記錄是否有對應外來鍵,如果有則不允許更新。

no action:意思同restrict.

cascade(級聯):當在父表(即外來鍵的**表)中更新對應記錄時,首先檢查該記錄是否有對應外來鍵,如果有則也更新外來鍵在子表(即包含外來鍵的表)中的記錄。

set null:當在父表(即外來鍵的**表)中更新對應記錄時,首先檢查該記錄是否有對應外來鍵,如果有則設定子表中該外鍵值為null(不過這就要求該外來鍵允許取null)。

注:no action和restrict的區別:只有在及個別的情況下會導致區別,前者是在其他約束的動作之後執行,後者具有最高的優先權執行。

mysql外來鍵和外來鍵約束

1.mysql中 鍵 和 索引 的定義相同,所以外來鍵和主鍵一樣也是索引的一種。不同的是mysql會自動為所有表的主鍵進行索引,但是外來鍵字段必須由使用者進行明確的索引。用於外來鍵關係的字段必須在所有的參照表中進行明確地索引 2.如果表a的主關鍵字是表b中的字段,則該字段稱為表b的外來鍵,表a稱為主...

mysql 外來鍵和外來鍵約束

1.外來鍵 如果公共關鍵字在乙個關係中是主關鍵字,那麼這個公共關鍵字被稱為另乙個關係的外來鍵。就是a表的主鍵,被用到了b表中,此時它就成了外來鍵 2.外來鍵約束 如果想要插入或者更新外來鍵的值,資料庫會和引用表中字段的資料進行驗證,如果插入或更改的值不在被引用的表中,則插入失敗 外來鍵的作用就是保證...

外來鍵約束 外來鍵級聯操作

建立db2資料庫 create database db2 使用db2資料庫 use db2 外來鍵約束 標準語法 constraint 外鍵名 foreign key 本表外來鍵列名 references 主表名 主表主鍵列名 建表時新增外來鍵約束 建立user使用者表 create table u...