Załóżmy, że mam atrybut o nazwie numer telefonu i chciałbym wprowadzić pewną ważność w odniesieniu do wpisów w tym polu. Czy mogę użyć do tego celu wyrażenia regularnego, ponieważ Wyrażenie regularne jest bardzo elastyczne przy definiowaniu wiązań.Czy możliwe jest egzekwowanie sprawdzania danych w MySQL przy użyciu wyrażenia regularnego
Odpowiedz
Tak, możesz. MySQL obsługuje regex (http://dev.mysql.com/doc/refman/5.6/en/regexp.html) i do sprawdzania poprawności danych należy użyć wyzwalacza, ponieważ MySQL nie obsługuje ograniczenia CHECK (zawsze możesz przejść do PostgreSQL jako alternatywy :). NB! Należy pamiętać, że nawet jeśli MySQL ma konstrukcję ograniczenia CHECK, niestety MySQL (do tej pory 5.6) nie sprawdza poprawności danych względem ograniczeń sprawdzania. Według http://dev.mysql.com/doc/refman/5.6/en/create-table.html: "Klauzula CHECK jest analizowana, ale ignorowana przez wszystkie silniki magazynujące."
Możesz dodać ograniczenie wyboru do kolumny telefon:
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!!!
Jednak nie należy polegać jedynie na MySQL (warstwy danych w Twoim przypadku) do sprawdzania poprawności danych. Dane powinny zostać zweryfikowane na wszystkich poziomach aplikacji.
Dzięki. Tego właśnie szukałem. Rozumiem, że wszystkie sprawdzania poprawności powinny być wykonywane na wszystkich warstwach, ale musiałem wiedzieć, jak to zrobić dla warstwy danych. –
- 1. Czy jest możliwe utworzenie dynamicznego wyrażenia regularnego w Ruby
- 2. dostać tylko cyfry przy użyciu wyrażenia regularnego
- 3. Potrzeba wyrażenia regularnego sprawdzania poprawności nazwy użytkownika
- 4. Jak uzyskać dopasowania w iOS przy użyciu wyrażenia regularnego?
- 5. Czy możliwe jest przechwytywanie danych odpowiedzi XHR przy użyciu WebDriver
- 6. Pomijanie pierwszych n linii przy użyciu wyrażenia regularnego z sed?
- 7. Jak sprawdzić poprawność wyrażenia regularnego?
- 8. Czy możliwe jest egzekwowanie przestrzegania przez Rekordy niektórych niezmienników?
- 9. Jak odrzucić ciąg, jeśli jest poprzedzony innym ciągiem przy użyciu standardowego wyrażenia regularnego w standardzie POSIX?
- 10. Automatyczne łączenie wyrażenia regularnego
- 11. Czy możesz użyć wyrażenia regularnego w .babelrc?
- 12. Czy odczytać plik, używając wyrażenia regularnego?
- 13. Jak używać wyrażenia regularnego do sprawdzania poprawności wprowadzania miesięcy?
- 14. Dopasuj zapytanie do wyrażenia regularnego w SQL?
- 15. Minimalna długość wyrażenia regularnego
- 16. Czy jest możliwe wykonanie kompilacji poza źródłem przy użyciu bjam?
- 17. Czy pole potwierdzenia modalnego przy użyciu JQuery jest możliwe?
- 18. Czy możliwe jest generowanie zwykłego kodu XML przy użyciu Haml?
- 19. Czy jest możliwe utworzenie przycisku przy użyciu dat.gui
- 20. Czy jest możliwe zdefiniowanie wymaganej flagi przy użyciu System.Console.CmdArgs.Implicit?
- 21. numery Normalizacja telefonu za pomocą wyrażenia regularnego
- 22. Dodawanie specjalnego znaku do wyrażenia regularnego?
- 23. Jak możemy znaleźć nazwę domeny MySQL i wyrażenia regularnego
- 24. Czy możliwe jest zapisanie wyrażenia lambda w tablicy C#
- 25. Wyjaśnienie wyrażenia regularnego dla vim
- 26. Czy jest możliwe włączenie sprawdzania granic tablicy w g ++?
- 27. Jak zakończyć wyrażenia regularnego z ukośnikiem w JavaScript
- 28. zabezpieczone hasłem z wyrażenia regularnego
- 29. Jak użyć wyrażenia regularnego do dopasowania nazwy?
- 30. Znaczenie części wyrażenia regularnego perla?
Krótka odpowiedź: Tak, możesz. Czy możesz dodać więcej kontekstu? Czy chcesz filtrować to na wejściu? Jeśli tak, to dlaczego nie filtrować, gdy na przykład użytkownik zarejestruje się? – HamZa
@HamZaDzCyberDeV Nie, nie na wejściu. Chcę wymusić to w bazie danych. Rozumiem, że można to zrobić w warstwie aplikacji, zastanawiałem się, czy to samo możliwe było w warstwie bazy danych podczas tworzenia tabel. –
Podczas tworzenia tabeli musisz określić typ kolumny, nie ma typu "numer telefonu". Możesz spojrzeć na [wyzwalacze] (http://dev.mysql.com/doc/refman/5.6/en/triggers.html) – HamZa