MySQLのCHECK制約が機能しない 質問する

MySQLのCHECK制約が機能しない 質問する

まず、次のような表を作成しました

CREATE TABLE Customer (
  SD integer CHECK (SD > 0),
  Last_Name varchar (30),
  First_Name varchar(30)
);

そしてそのテーブルに値を挿入しました

INSERT INTO Customer values ('-2','abc','zz');

MySQL はエラーを表示せず、値を受け入れました。

ベストアンサー1

MySQL 8.0.16CHECK 制約をサポートする最初のバージョンです。

読むhttps://dev.mysql.com/doc/refman/8.0/en/create-table-check-constraints.html

MySQL 8.0.15以前を使用している場合は、MySQL リファレンスマニュアル言う:

このCHECK句は解析されますが、すべてのストレージ エンジンによって無視されます。

トリガーを試してください...

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 ;

おすすめ記事