2011-09-13 14 views
0

MySqlは、CREATE TABLEの構文でCHECKを無視することを理解しています。私は思っていた - なぜトリガーを使用しない?MySqlのテーブルとトリガー

たとえば、私は人のテーブルを持ち、1つのフィールドは電話番号です。電話番号が有効かどうか(地域番号など)、無効な電話番号のイベントが発生した場合に、適切なエラーメッセージで挿入が失敗することを検証するためのトリガーを構築できますか?

答えて

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 ; 
1

はい、可能ですし、しばしば解決策があります。

MySQL 5.5以降では、SIGNALを使用してエラーメッセージを表示できます。その前に、別の方法でエラーを呼び出す必要があります。私は通常、UNIQUEインデックスのテーブルにエラーメッセージを挿入するので、この挿入は失敗し、エラーメッセージはMySQLのエラーメッセージに含まれます。

関連する問題