私は電話番号という属性があり、このフィールドのエントリに特定の妥当性を適用したいとします。正規表現は制約を定義する際に非常に柔軟なので、この目的のために正規表現を使用できますか?正規表現を使用してMySQLでデータチェックを行うことは可能ですか
6
A
答えて
12
はい、できます。 MySQLは正規表現(http://dev.mysql.com/doc/refman/5.6/en/regexp.html)をサポートしており、データ検証のためにMySQLはCHECK制約をサポートしていないので、トリガを使用する必要があります(代わりに、常にPostgreSQLに移動できます)。注意!残念ながら、MySQL(これまでの5.6)はチェック制約からデータを検証していないことに注意してください。 http://dev.mysql.com/doc/refman/5.6/en/create-table.htmlによると: "CHECK句は解析されますが、すべてのストレージエンジンで無視されます。"
あなたが列電話のチェック制約を追加することができます。
CREATE TABLE data (
phone varchar(100)
);
DELIMITER $$
CREATE TRIGGER trig_phone_check BEFORE INSERT ON data
FOR EACH ROW
BEGIN
IF (NEW.phone REGEXP '^(\\+?[0-9]{1,4}-)?[0-9]{3,10}$') = 0 THEN
SIGNAL SQLSTATE '12345'
SET MESSAGE_TEXT = 'Wroooong!!!';
END IF;
END$$
DELIMITER ;
INSERT INTO data VALUES ('+64-221221442'); -- should be OK
INSERT INTO data VALUES ('+64-22122 WRONG 1442'); -- will fail with the error: #1644 - Wroooong!!!
あなたはデータ検証のためのMySQL(あなたのケースではデータ層)の上に単に頼るべきではありませんが。データはアプリのすべてのレベルで検証する必要があります。
+0
ありがとうございました。これは私が探していたものです。私は、すべてのレイヤーですべてのバリデーションを行う必要があることを理解していますが、データレイヤーの仕組みを知る必要がありました。 –
関連する問題
- 1. 正規表現でグループを使用することは可能ですか?
- 2. 正規表現をC++で使うことは可能ですか?
- 3. mysqlここでIN文は正規表現を使用していますか?
- 4. 正規表現で正規表現の文字列を解析することは可能ですか?
- 5. 正規表現を使用してPowerShellのparamブロックを解析することは可能ですか
- 6. 複雑な正規表現 - これは可能ですか?
- 7. ここでMySQL正規表現
- 8. 正規表現でこれを行うことはできますか?
- 9. Mysqlクエリで正規表現とアンダースコアを使用する
- 10. 改行と正規表現を使用して「\ n」は
- 11. Hibernate MySQLで正規表現を使用するには?
- 12. 正規表現ですべての等しい値サブアレイを識別することは可能ですか?
- 13. 正規表現正規表現と異なるハイブ正規表現ですか?
- 14. mysqlでUPDATEとINSERTを行うことは可能ですか?
- 15. 正規表現1または2のライナー - 可能ですか?
- 16. Java:do-while(正規表現)、hashtable.containsKey()は可能ですか?
- 17. Noob正規表現の質問 - それは可能ですか?
- 18. pdfqueryで正規表現を使用することはできますか?
- 19. SQLで正規表現を使用することはできますか?
- 20. fgrepで正規表現を使用することはできますか?
- 21. 正規表現を使用している可能性があります。
- 22. javascriptの正規表現(正規表現)はどこで使用されていますか?
- 23. 行番号はNotepad ++で正規表現を使用していますか?
- 24. 正規表現を使って正規表現を使用する正規表現CSS
- 25. 正規表現を使用してコンテンツを取得する正規表現
- 26. 正規表現:どのように正規表現を使用することにより、引用符
- 27. RSpecの正規表現を使用しようとしていますhave_selector行
- 28. 正規表現C# - マッチしている間にマッチを抽出することは可能ですか?
- 29. 正規表現を使用して
- 30. 正規表現を使用してR
短い回答:可能です。コンテキストを追加できますか?入力時にフィルタリングしますか?もしそうなら、ユーザーがサインアップしたときなどにフィルタリングしないのはなぜですか? – HamZa
@HamZaDzCyberDeVいいえ、入力時ではありません。私はこれをデータベースに強制したい。私はそれがアプリケーション層で行うことができることを理解し、テーブルを作成するときに同じことがデータベースレイヤーで可能かどうか疑問に思っていました。 –
テーブルを作成するときには、列の種類を指定する必要があります。「電話番号」タイプはありません。 [トリガー](http://dev.mysql.com/doc/refman/5.6/en/triggers.html) – HamZa