Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Czy można wymusić sprawdzanie danych w MySQL za pomocą wyrażenia regularnego?

Tak, możesz. MySQL obsługuje regex (http://dev.mysql.com/doc /refman/5.6/en/regexp.html ) a do walidacji danych powinieneś użyć wyzwalacza, ponieważ MySQL nie obsługuje ograniczenia CHECK (zawsze możesz przejść do PostgreSQL jako alternatywy :). Uwaga! Należy pamiętać, że chociaż MySQL ma konstrukcję ograniczającą CHECK, niestety MySQL (do tej pory 5.6) nie sprawdza poprawności danych pod kątem ograniczeń sprawdzających. Według http://dev.mysql.com/doc /refman/5.6/en/create-table.html :"Klauzula CHECK jest analizowana, ale ignorowana przez wszystkie silniki pamięci masowej."

Możesz dodać ograniczenie sprawdzające dla 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 powinieneś polegać tylko na MySQL (warstwie danych w twoim przypadku) do walidacji danych. Dane powinny być zweryfikowane na wszystkich poziomach Twojej aplikacji.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. PHP wyświetla obraz BLOB z MySQL

  2. Django :Tabela nie istnieje

  3. Jak zmienić strefę czasową serwera MySQL

  4. Warunkowe wstawianie MySQL

  5. Neo4j - Usuń ograniczenie za pomocą Cypher