首頁 > 資料庫 > mysql教程 > MySQL CHECK 約束如何運作,以及如何確保舊版本和新版本中的資料驗證?

MySQL CHECK 約束如何運作,以及如何確保舊版本和新版本中的資料驗證?

Barbara Streisand
發布: 2025-01-10 10:32:42
原創
287 人瀏覽過

How Do MySQL CHECK Constraints Work, and How Can I Ensure Data Validation in Older and Newer Versions?

MySQL中的CHECK約束

在嘗試向MySQL表新增CHECK約束時,當插入違反約束的資料時,可能會遇到意外行為。本文將深入探討MySQL中CHECK限制的細微之處,並提供一個強制驗證的解決方案。

在MySQL的早期版本(直到8.0.15)中,CHECK約束已定義但未強制執行。如同MySQL參考手冊所述:「CHECK子句由所有儲存引擎解析但被忽略。」

MySQL 8.0.15及更早版本的解決方案

為了在缺乏原生CHECK約束支援的情況下強制執行資料驗證,您可以建立一個觸發器:

<code class="language-sql">DELIMITER //

CREATE TRIGGER trig_sd_check BEFORE INSERT ON Customer
FOR EACH ROW
BEGIN
  IF NEW.SD < 0 THEN
    SET NEW.SD = 0;
  END IF;
END //

DELIMITER ;</code>
登入後複製

此觸發器將攔截任何INSERT語句,如果SD列的值小於0,則將其修改為0,確保約束得到維護。

MySQL 8.0.16及更高版本的CHECK限制

MySQL 8.0.16引入了對CHECK約束的全面支援。若要在8.0.16或更高版本中定義CHECK約束,請使用下列語法:

<code class="language-sql">CREATE TABLE Customer (
  SD integer CHECK (SD > 0),
  Last_Name varchar (30),
  First_Name varchar(30)
);</code>
登入後複製

MySQL現在將強制執行約束,並阻止插入違反約束的資料。

以上是MySQL CHECK 約束如何運作,以及如何確保舊版本和新版本中的資料驗證?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板