回覆列表
  • 1 # 有點IT

    首先使用約束可以確保表資料的準確完整和唯一性;

    其中常見的約束有

    PRIMARY KEY, DEFAULT, UNIQUE, FOREIGN KEY,NOT NULL

    一般情況下:DEFAULT 和 NOT NULL是會限制的,可以確保資料完整避免程式邏輯不夠嚴謹造成的系統異常。但也不是絕對的,如果是後期最佳化還要考慮現有資料是否會造成衝突。

    PRIMARY KEY 在大對數情況下會設定作為業務資料的唯一識別符號。但一些關係表一般可以不設定。有人說PRIMARY KEY 必須自增,其實也未必。得就實際業務需求而定。

    UNIQUE 約束可以保證一列或者多列組合值都是唯一的。可以提升這一列的搜尋效率。但同樣也得考慮歷史資料的情況。

    當然以上情況只是經驗之談,具體資料庫的最佳化一定是根據實際的業務邏輯進行的。可能沒有什麼必須遵守不可違背的定律。

    只要符合業務需求並且能夠提升業務效率,就是合理的設計。

  • 2 # 愛可生雲資料庫

    這是一項新功能,用於指定在插入或更新到一行之前檢查值的條件。如果表的任何行的搜尋條件的結果為 FALSE,則約束可能返回錯誤(但如果結果為 UNKNOWN 或 TRUE,則約束不會返回錯誤)。此功能開始在 MySQL 8.0.16 上執行,在以前的版本中,我們可以建立它,但它不起作用,這意味著支援語法,但不起作用。要牢記的使用規則:

    AUTO_INCREMENT 自增列不允許使用引用另一個表中的另一列不允許使用儲存的函式和使用者定義的函式不允許使用儲存過程和函式引數不允許使用子查詢不允許使用在外來鍵中用於後續操作(ON UPDATE,ON DELETE)的列不允許使用為下一條語句 INSERT,UPDATE,REPLACE,LOAD DATA 和 LOAD XML 評估此次監測。此外,還會為 INSERT IGNORE,UPDATE IGNORE,LOAD DATA…IGNORE 和 LOAD XML…IGNORE 評估此監測約束。對於這些語句,如果約束的評估結果為 FALSE,則會發生警告。插入或更新被跳過。

    我們可以使用此功能在表中新增更多的邏輯,但是根據我以前作為程式設計師的經驗,我不建議在表中新增邏輯,因為除非您無法訪問應用程式程式碼,否則很難找到或除錯錯誤。

  • 3 # 星辰大洋

    外來鍵約束可以保證資料的正確性和有效性,防止出現不符合預期資料,從資料的角度來說是必要的。為了保證約束,資料庫會在更新資料時,對相應表的資料進行檢查,這就帶來了很大的效能開銷。

    目前的網際網路應用實踐來說,一般在開發測試環境使用外來鍵,而生產環境則不使用外來鍵。目的是在開發測試階段透過資料庫的外來鍵機制來驗證程式的正確性,而在生產環境則不使用外來鍵,來提升資料庫的效能。

    非空約束推薦使用,以mysql來說,是有好處的。

    如果一個欄位它的資料要求每一行資料都是唯一,並且會頻繁用於查詢,那麼推薦增加唯一索引

  • 中秋節和大豐收的關聯?
  • 泰迪眼睛大小標準?