0

こんにちは、 MySQL 5.5.8MySQL TRIGGERSを使用しています。テーブルがあります。制約を許可しないため、入力値が間違っていることを確認するために使用しました。入力値が間違っている場合は、メッセージを出してテーブルへのレコードの挿入を停止しようとしました。ただし、無効なデータが含まれている場合、テーブルへのレコードの挿入は無視されます。MySQLCHECKTRIGGERTRIGGER

テーブル

CREATE TABLE pupil_data
(
PupilID int(10) NOT NULL  AUTO_INCREMENT,
PupilForeName varchar(255) NOT NULL,
PupilLastName varchar(255) NOT NULL,
Gender CHAR(1),
DateOfBirth  DATE ,
PhoneNumber int(10) ,
FamilyID int(10) NOT NULL,
PRIMARY KEY (PupilID),
FOREIGN KEY (FamilyID) REFERENCES family_data(FamilyID)  
ON DELETE CASCADE
ON UPDATE CASCADE
,
UNIQUE (PhoneNumber)
) ENGINE=innodb;

引き金

DELIMITER $$
CREATE TRIGGER `check_pupil_before_insert` BEFORE INSERT ON `pupil_data`
FOR EACH ROW  BEGIN
  IF  CHAR_LENGTH( NEW.DateOfBirth ) < 4 THEN
       SIGNAL SQLSTATE '12345'
        SET MESSAGE_TEXT := 'check constraint on pupil_data.DateOfBirth  failed'
    END IF;
END$$  
DELIMITER ;

DateOfBirth に入力された値が 4 文字未満かどうかを確認したいのですが、レコードを挿入せずにエラー メッセージを表示します。

ここに画像の説明を入力

の値はDateOfBirth0あるため、エラーが発生するはずですが、ご覧のとおり、無視して実行しています。

理由は何ですか、私はこれを間違っています、助けてください、事前に感謝します.

アップデート

ここに画像の説明を入力

4

1 に答える 1

3

トリガーの定義が間違っています。日付データ型を使用しており、そのために char length をチェックしています。mysql はデフォルトで日付を「0000-00-00」として入力するため、これはおそらく間違っています。さらに、構文が間違っています...

したがって、トリガーの定義は次のようになります

 CREATE TRIGGER `check_pupil_before_insert` BEFORE INSERT ON `pupil_data`
FOR EACH ROW  BEGIN
 IF   NEW.DateOfBirth = '0000-00-00' THEN
   SIGNAL SQLSTATE '12345'
    SET MESSAGE_TEXT = 'check constraint on pupil_data.DateOfBirth  failed';
 END IF;
END$$  

これを試して ..

于 2013-03-21T06:01:52.080 に答える