MySQL CHECK約束失效問題
在定義資料庫表時,新增約束來確保資料完整性非常重要。 CHECK約束可讓您指定特定列的值必須滿足的條件。然而,在MySQL 8.0.15及更早版本中,CHECK約束並未被強制執行,這是一種特殊情況。
舉例說明:
CREATE TABLE Customer ( SD integer CHECK (SD > 0), Last_Name varchar (30), First_Name varchar(30) );
建立此表後,嘗試插入SD值為負數的行:
INSERT INTO Customer values ('-2', 'abc', 'zz');
MySQL不會報錯,即使插入的值違反了指定的CHECK約束。這是因為根據MySQL參考手冊:
<code>CHECK子句会被解析,但所有存储引擎都会忽略它。</code>
解:
為了解決這個問題,您可以採取以下方法之一:
- 升級到MySQL 8.0.16或更高版本: 此版本開始支援CHECK限制。請參閱MySQL文件以了解更多詳情。
- 實作觸發器: 觸發器可以用來強制儲存引擎忽略的約束。建立一個在插入之前檢查SD值的觸發器,如下所示,可以有效地強制執行約束:
mysql> delimiter // mysql> 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 -> // mysql> delimiter ;
請注意,上面的觸發器範例將負數的SD值設為0,您可以根據實際需求修改觸發器邏輯。
以上是為什麼MySQL CHECK約束在8.0.16之前的版本失敗?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本文討論了使用MySQL的Alter Table語句修改表,包括添加/刪除列,重命名表/列以及更改列數據類型。

文章討論了為MySQL配置SSL/TLS加密,包括證書生成和驗證。主要問題是使用自簽名證書的安全含義。[角色計數:159]

文章討論了流行的MySQL GUI工具,例如MySQL Workbench和PhpMyAdmin,比較了它們對初學者和高級用戶的功能和適合性。[159個字符]

本文討論了使用Drop Table語句在MySQL中放下表,並強調了預防措施和風險。它強調,沒有備份,該動作是不可逆轉的,詳細介紹了恢復方法和潛在的生產環境危害。

本文討論了在PostgreSQL,MySQL和MongoDB等各個數據庫中的JSON列上創建索引,以增強查詢性能。它解釋了索引特定的JSON路徑的語法和好處,並列出了支持的數據庫系統。

文章討論了使用準備好的語句,輸入驗證和強密碼策略確保針對SQL注入和蠻力攻擊的MySQL。(159個字符)


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

Dreamweaver CS6
視覺化網頁開發工具

ZendStudio 13.5.1 Mac
強大的PHP整合開發環境

MinGW - Minimalist GNU for Windows
這個專案正在遷移到osdn.net/projects/mingw的過程中,你可以繼續在那裡關注我們。 MinGW:GNU編譯器集合(GCC)的本機Windows移植版本,可自由分發的導入函式庫和用於建置本機Windows應用程式的頭檔;包括對MSVC執行時間的擴展,以支援C99功能。 MinGW的所有軟體都可以在64位元Windows平台上運作。

VSCode Windows 64位元 下載
微軟推出的免費、功能強大的一款IDE編輯器

Dreamweaver Mac版
視覺化網頁開發工具