MySQL 9.0 參考手冊  /  ...  /  MySQL 如何處理約束

1.7.3 MySQL 如何處理約束

MySQL 允許您使用可回滾的交易式表格,以及不可回滾的非交易式表格。因此,MySQL 中的約束處理方式與其他 DBMS 有些不同。我們必須處理當您在非交易式表格中插入或更新了許多列,而當發生錯誤時無法回滾變更的情況。

基本理念是,MySQL 伺服器會嘗試針對在剖析要執行的陳述式時可以偵測到的任何問題產生錯誤,並嘗試從執行陳述式時發生的任何錯誤中復原。我們在大多數情況下都會這樣做,但並非所有情況都如此。

當發生錯誤時,MySQL 的選項是在中間停止陳述式,或盡可能從問題中復原並繼續。預設情況下,伺服器會採取後者。例如,這表示伺服器可能會將無效值強制轉換為最接近的有效值。

有數個 SQL 模式選項可用於對處理錯誤資料值以及在發生錯誤時是否繼續執行陳述式或中止提供更大的控制權。使用這些選項,您可以將 MySQL 伺服器設定為以更傳統的方式運作,類似於其他拒絕不當輸入的 DBMS。SQL 模式可以在伺服器啟動時全域設定,以影響所有用戶端。個別用戶端可以在執行階段設定 SQL 模式,讓每個用戶端都能夠選擇最適合其需求的行為。請參閱第 7.1.11 節,〈伺服器 SQL 模式〉

以下章節說明 MySQL 伺服器如何處理不同類型的約束。