總結: 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自動增長保證了唯一性,所以可以。此時,我們再建立...