踩坑:
看到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...