2012-05-08 79 views
5

Tôi đang cố giới hạn số lượng số mà một trường số nguyên có thể chứa. Ví dụ, tôi muốn trường có chứa một số không quá 5 dài, vì vậy 99999 sẽ là mục nhập hợp lệ cao nhất.Giới hạn độ dài trường dữ liệu số nguyên

Điều này có thể thực hiện trong MySQL không? Tôi đã xem tài liệu nhưng không tìm thấy câu trả lời của tôi.

Trả lời

3

Thật không may là ràng buộc CHECK cũng như các loại do người dùng xác định được triển khai trong MySQL. Có thể điều này sẽ thay đổi trong các phiên bản sau.

Cho đến lúc đó bạn có thể sử dụng một kích hoạt để sửa thông tin nhập nếu đó là một con đường để đi cho bạn:

delimiter // 
CREATE TRIGGER trigger_check BEFORE INSERT ON your_table 
FOR EACH ROW 
BEGIN 
    IF NEW.NUM > 99999 THEN 
     SET NEW.NUM = 0; 
    END IF; 
END 
// 
+1

Vì lợi ích của sự hoàn chỉnh, bạn cũng có thể sử dụng một khóa ngoại đến một bảng các số nguyên đó kết thúc ở 99999. –

0

Điều này không thể thực hiện ở cấp DB. Bạn sẽ phải sử dụng các thủ tục được lưu trữ hoặc đặt logic đó trong ứng dụng của bạn.

http://dev.mysql.com/doc/refman/5.5/en/integer-types.html

Int trung bình là gần nhất bạn có thể nhận được.

Ngoài ra, bạn có thể sẽ thấy một cái gì đó như thế này tại một số điểm:

CREATE TABLE blah (col INT (5)); 

này không làm những gì bạn nghĩ mặc dù. Điều này không thực sự hạn chế độ dài của trường đến 5 địa điểm. Nó biểu thị rằng nó phải là 0 đệm đến 5 nơi khi zerofill được đặt trên cột.

1

Bạn có thể thêm trình kích hoạt để thực thi việc này bất cứ khi nào thay đổi được thực hiện cho cơ sở dữ liệu. Trình kích hoạt sẽ thực hiện trước khi thay đổi sẽ được áp dụng để xác minh rằng nó đang cập nhật với mục nhập "hợp lệ". Nếu mục nhập không hợp lệ, bản cập nhật có thể bị từ chối.

Các vấn đề liên quan