gorm標籤外來鍵失效

2021-10-25 15:20:26 字數 1651 閱讀 9300

踩坑:

看到gorm文件,應該是在tag標籤中寫入foreignkey可以設定外來鍵,但是不能達到預期效果

type user struct

type language struct

介紹乙個函式

db.

model()

.addforeignkey()

//需要使用已經存在的表

model()

db.

model()

.addforeignkey()

//model()函式傳入那個表需要的外來鍵

//例如開頭的user表和language表,外來鍵在user表中,則需要傳入user結構體的位址

db.model

(&user).

addforeignkey

()

addforeignkey()

函式需要四個引數:

外來鍵鍵名(遷移資料庫之後生成的欄位名,不是結構體中的欄位名)

關聯的外來鍵:關聯的表名(欄位名),同樣都是生成的資料庫的表名和欄位名

刪除時的狀態:set null ,no action,cascade,restrict,其中restrict和no action相同,如果子表有關聯資料,父表對應資料不能進行刪除,cascade模式:如果刪除父表資料,則對應的子表資料也相應刪除,set null模式:如果父表刪除資料,對應的子表的資料的外來鍵被設定為null,但是相應的這個模式要求子表外來鍵字段可以為null

更新時表的狀態,與刪除時的四種狀態相同

type user struct

type language struct

func

migrate()

,&user

) db.

model

(&user).

addforeignkey

("languages_id"

,"languages(id)"

,"cascade"

,"cascade"

)//在user表中生成外來鍵為languages_id欄位,對應的外表為languages的id欄位languages(id),模式為cascade

}

gorm中有巢狀的gorm.model結構體,其中有id欄位

type user struct

type language struct

db.model

(&user).

addforeignkey

("languages_id"

,"languages(id)"

,"restrict"

,"restrict"

)//需要注意,如果這種情況遷移資料庫,不會成功

//原因:gorm.model中的id欄位為int unsigned型別,如果兩個字段型別不相對應,則不能成為兩個表對應欄位的外來鍵

更改之後

type user struct

type language struct

//此時可以遷移資料庫

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...