Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Có thể thực thi kiểm tra dữ liệu trong MySQL bằng biểu thức chính quy không

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.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Khi nào tôi nên sử dụng MySQLi thay vì MySQL?

  2. mysql PDO cách liên kết LIKE

  3. Thực hiện khoảng cách Levenshtein cho tìm kiếm mysql / mờ?

  4. HIỂN THỊ BẢNG BIỂU trong MySQL

  5. Cách thay thế một phần của chuỗi trong MySQL