W3Cschool
恭喜您成為首批注冊(cè)用戶
獲得88經(jīng)驗(yàn)值獎(jiǎng)勵(lì)
所有 Django 支持的數(shù)據(jù)庫(kù)后端都支持遷移,還有些支持表修改(通過 SchemaEditor 類實(shí)現(xiàn))的第三方后端也支持。
然而,有些數(shù)據(jù)庫(kù)在表結(jié)構(gòu)變更方面比其它數(shù)據(jù)庫(kù)更強(qiáng);下面介紹一些注意事項(xiàng)。
PostgreSQL 在架構(gòu)支持方面是所有數(shù)據(jù)庫(kù)中是最強(qiáng)的。
唯一需要注意的是,在 PostgreSQL 11 之前,添加具有默認(rèn)值的列會(huì)導(dǎo)致表的完全重寫,時(shí)間長(zhǎng)短與表的大小成正比。 因此,建議你始終使用 ?null=True
? 創(chuàng)建新列,因?yàn)檫@樣可以立即添加它們。
MySQL 缺乏對(duì)架構(gòu)變更操作相關(guān)事務(wù)的支持,這意味著如果遷移失敗,你將必須手動(dòng)取消更改才能重試(無法回滾到較早的時(shí)間)。
此外,MySQL 幾乎每一次架構(gòu)操作都會(huì)完全重寫表,一般來說,增加或刪除列需要的時(shí)間與表的行數(shù)成正比。在速度較慢的硬件上,這可能比每百萬行一分鐘還要糟糕——在一個(gè)只有幾百萬行的表中添加幾列,可能會(huì)讓你的網(wǎng)站鎖定十幾分鐘。
最后,MySQL 對(duì)列、表和索引的名稱長(zhǎng)度有相對(duì)較小的限制,并且對(duì)索引涵蓋的所有列的組合大小也有限制。 這意味著在其他后端上創(chuàng)建的索引將可能無法在 MySQL 下創(chuàng)建。
SQLite 幾乎沒有內(nèi)置的架構(gòu)更改支持,因此 Django 嘗試通過以下方式對(duì)其進(jìn)行模擬:
Copyright©2021 w3cschool編程獅|閩ICP備15016281號(hào)-3|閩公網(wǎng)安備35020302033924號(hào)
違法和不良信息舉報(bào)電話:173-0602-2364|舉報(bào)郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號(hào)
聯(lián)系方式:
更多建議: