sql >> データベース >  >> RDS >> Mysql

MYSQL:OR条件と正規表現が一致する場合

    多くの可能性をデバッグし、SOの答えを掘り下げた後、最終的に正しいバージョンのトリガーを取得しました。他の開発者がクラックできなかったのはSCI-FIの質問ではなかったので、迅速な対応を期待していました。

    間違い1ENDIF間のスペース 。 END IFである必要があります 。

    間違い2new.columnがありません トリガー定義から;

    正しいバージョン

    CREATE TRIGGER `trg_contact_insert_profanity_check` BEFORE INSERT ON `contacts`
     FOR EACH ROW BEGIN
    IF ((new.email IN (SELECT word FROM profanity)) OR (new.message
     IN (SELECT word FROM profanity)) OR (new.message REGEXP '/(http|https|ftp|ftps)?(://)?[a-zA-Z0-9-.]+.[a-zA-Z]{2,3}(/S*)?/' ))
    THEN
    SIGNAL SQLSTATE '45000'
    SET MESSAGE_TEXT = "Database Error: BAD REQUEST";
    END IF;
    END
    



    1. PHP MySQL-エラー:データベースが選択されていません

    2. MariaDBでのRAND()のしくみ

    3. MySQL。リレーショナルテーブルの主キー。一意のIDまたは複数の一意のキー?

    4. 各GROUPBY式には、外部参照ではない列が少なくとも1つ含まれている必要があります