MySqlは、CREATE TABLE
の構文でCHECK
を無視することを理解しています。私は思っていた - なぜトリガーを使用しない?MySqlのテーブルとトリガー
たとえば、私は人のテーブルを持ち、1つのフィールドは電話番号です。電話番号が有効かどうか(地域番号など)、無効な電話番号のイベントが発生した場合に、適切なエラーメッセージで挿入が失敗することを検証するためのトリガーを構築できますか?
MySqlは、CREATE TABLE
の構文でCHECK
を無視することを理解しています。私は思っていた - なぜトリガーを使用しない?MySqlのテーブルとトリガー
たとえば、私は人のテーブルを持ち、1つのフィールドは電話番号です。電話番号が有効かどうか(地域番号など)、無効な電話番号のイベントが発生した場合に、適切なエラーメッセージで挿入が失敗することを検証するためのトリガーを構築できますか?
はい、挿入された値を検証し、未知のプロシージャを呼び出すトリガを作成できます。例えば、 -
CREATE TABLE table1
id INT(11) NOT NULL,
phone VARCHAR(10) DEFAULT NULL,
PRIMARY KEY (id)
);
DELIMITER $$
CREATE trigger1
BEFORE INSERT
ON table1
FOR EACH ROW
BEGIN
IF NOT NEW.phone REGEXP '^[0-9]{3}-[0-9]{2}-[0-9]{2}$' THEN
CALL error; -- Call nonexistent procedure
END IF;
END
$$
DELIMITER ;
はい、可能ですし、しばしば解決策があります。
MySQL 5.5以降では、SIGNAL
を使用してエラーメッセージを表示できます。その前に、別の方法でエラーを呼び出す必要があります。私は通常、UNIQUE
インデックスのテーブルにエラーメッセージを挿入するので、この挿入は失敗し、エラーメッセージはMySQLのエラーメッセージに含まれます。