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.