Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

É possível impor a verificação de dados no MySQL usando expressão regular


Sim você pode. MySQL suporta regex (http://dev.mysql.com/doc /refman/5.6/en/regexp.html ) e para validação de dados, você deve usar um gatilho, pois o MySQL não suporta a restrição CHECK (você sempre pode mudar para o PostgreSQL como alternativa:). NB! Esteja ciente de que embora o MySQL tenha a construção de restrição CHECK, infelizmente o MySQL (até agora 5.6) não valida dados contra restrições de verificação. De acordo com http://dev.mysql.com/doc /refman/5.6/en/create-table.html :"A cláusula CHECK é analisada, mas ignorada por todos os mecanismos de armazenamento."

Você pode adicionar uma restrição de verificação para uma coluna telefone :
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!!! 

No entanto, você não deve confiar apenas no MySQL (camada de dados no seu caso) para validação de dados. Os dados devem ser validados em todos os níveis do seu aplicativo.