Mysql
 sql >> Database >  >> RDS >> Mysql

È possibile applicare il controllo dei dati in MySQL utilizzando l'espressione regolare

Si, puoi. MySQL supporta regex (http://dev.mysql.com/doc /refman/5.6/en/regexp.html ) e per la convalida dei dati dovresti usare un trigger poiché MySQL non supporta il vincolo CHECK (puoi sempre passare a PostgreSQL in alternativa:). NB! Tieni presente che anche se MySQL ha un costrutto di vincoli CHECK, sfortunatamente MySQL (finora 5.6) non convalida i dati rispetto ai vincoli di controllo. Secondo http://dev.mysql.com/doc /refman/5.6/en/create-table.html :"La clausola CHECK viene analizzata ma ignorata da tutti i motori di archiviazione."

Puoi aggiungere un vincolo di controllo per una colonna telefono :

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!!! 

Tuttavia, non dovresti fare affidamento solo su MySQL (livello dati nel tuo caso) per la convalida dei dati. I dati devono essere convalidati a tutti i livelli della tua app.