Có, bạn có thể. MySQL hỗ trợ regex ( http://dev.mysql.com/doc /refman/5.6/en/regexp.html ) và để xác thực dữ liệu, bạn nên sử dụng trình kích hoạt vì MySQL không hỗ trợ ràng buộc CHECK (bạn luôn có thể chuyển sang PostgreSQL để thay thế :). NB! Cần biết rằng mặc dù MySQL có cấu trúc ràng buộc CHECK, nhưng rất tiếc MySQL (cho đến nay 5.6) không xác thực dữ liệu theo các ràng buộc kiểm tra. Theo http://dev.mysql.com/doc /refman/5.6/en/create-table.html :"Mệnh đề CHECK được phân tích cú pháp nhưng bị bỏ qua bởi tất cả các công cụ lưu trữ."
Bạn có thể thêm ràng buộc kiểm tra cho cột điện thoại :
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!!!
Tuy nhiên, bạn không nên chỉ dựa vào MySQL (lớp dữ liệu trong trường hợp của bạn) để xác thực dữ liệu. Dữ liệu phải được xác thực trên tất cả các cấp ứng dụng của bạn.