資料庫更改主鍵的型別 主鍵存在外來鍵

2022-05-28 17:09:13 字數 2104 閱讀 8296

總結: sqlserver想要修改主鍵的資料型別

如果有外來鍵 那麼刪除主鍵與外來鍵的約束

修改主鍵的資料型別 新增此表主鍵約束 如果外來鍵也是另乙個表的主鍵 那麼繼續刪除此表主鍵的約束 修改此column的資料型別 新增此表主鍵約束  新增外來鍵約束

if(a.column = a.primarykey)

}

else

}

檢視表的外來鍵約束**

select name

from sys.foreign_key_columns f

join sys.objects o

on f.constraint_object_id = o.object_id

where f.parent_object_id = object_id('表名');

例子:

將主鍵sno的型別改為char(11)

先刪除外來鍵 再修改主鍵型別 然後新增外來鍵

alter table student

drop constraint pk_student       //這個是主鍵約束

alter table sc

drop constraint fk__sc__sno__3f466844   //這個是外來鍵約束  在另乙個表sc 中

fk__sc__sno__3f466844經過查詢外來鍵已經被刪除

接下來修改主鍵資料型別

主鍵型別修改成功, 但是現在已經不是主鍵了,所以接下來新增主鍵約束

測試一下結果在有主鍵約束的條件下也不能修改主鍵型別  好麻煩啊  (純測試用)

所以接下來修改外來鍵型別時 因為外來鍵在sc表中也是主鍵 所以同樣主外來鍵約束都要刪除 然後修改再新增

刪除sc的主鍵約束 然後修改型別 新增型別

修改主鍵型別

新增主鍵約束

然後新增外來鍵約束

成功!

資料庫主鍵方案

1 堅決不可以用某個業務字段做主鍵,理由就不說了,業務都是有意義的,你能保證它產生的規則不變嗎?2 如果要彙總兩個庫表,id很多重複,那為什麼要把a表的資料匯入到b表,為什麼程式不能自己到2個表中去查詢呢,再說了,資料大了還要拆表呢 3 guid作為主鍵,mysql本身並沒有這個資料型別,oracl...

資料庫主鍵設計

主鍵的必要性 有些朋友可能不提倡資料庫表必須要主鍵,但在我的思考中,覺得每個表都應該具有主鍵,不管是單主鍵還是雙主鍵,主鍵的存在就代表著表結構的完整性,表的記錄必須得有唯一區分的字段,主鍵主要是用於其他表的外來鍵關聯,本記錄的修改與刪除,當我們沒有主鍵時,這些操作會變的非常麻煩。主鍵的無意義性 我強...

資料庫為何要有復合主鍵(多主鍵)

最近學習一點資料庫的基本知識,被乙個問題困惑了許久 主鍵是唯一的索引,那麼為何乙個表可以建立多個主鍵呢?其實 主鍵是唯一的索引 這話有點歧義的。舉個例子,我們在表中建立了乙個id欄位,自動增長,並設為主鍵,這個是沒有問題的,因為 主鍵是唯一的索引 id自動增長保證了唯一性,所以可以。此時,我們再建立...