Mysql
 sql >> база данни >  >> RDS >> Mysql

Възможно ли е да се наложи проверка на данни в MySQL с помощта на регулярен израз

Да, можеш. MySQL поддържа регулярни изрази (http://dev.mysql.com/doc /refman/5.6/en/regexp.html ) и за валидиране на данни трябва да използвате тригер, тъй като MySQL не поддържа ограничение CHECK (винаги можете да преминете към PostgreSQL като алтернатива:). NB! Имайте предвид, че въпреки че MySQL има конструкция на ограничение CHECK, за съжаление 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 (слой данни във вашия случай) за валидиране на данни. Данните трябва да бъдат валидирани на всички нива на вашето приложение.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Важно ли е затварянето на mysql връзката?

  2. Ефективно наблюдение на MySQL с табла за управление на SCUMM:Част първа

  3. TINYTEXT, TEXT, MEDIUMTEXT и LONGTEXT максимални размери за съхранение

  4. BIN() – Вземете двоичната стойност на число в MySQL

  5. Mysql преброява екземпляри на подниз, след което подрежда по