Bạn sẽ sử dụng từ khóa unsigned
để biểu thị rằng số nguyên không cho phép một "dấu hiệu" (tức là - nó chỉ có thể là số dương) :
CREATE TABLE test (
test_column int(11) unsigned
);
Bạn có thể đọc thêm về các loại dữ liệu số (ký & unsigned) here.
Theo như một thực tế chế để ngăn chặn sự chèn-các giá trị tiêu cực, MySQL có một điều khoản CHECK
có thể được sử dụng trong báo cáo kết quả CREATE TABLE
, tuy nhiên, theo các tài liệu:
CHECK mệnh đề đượ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ữ.
Để tham khảo, đây là cách bạn sẽ sử dụng nó (và mặc dù nó sẽ thực hiện hoàn toàn tốt, nó chỉ không làm gì - như các tiểu bang thủ công):
CREATE TABLE test (
test_column int(11) unsigned CHECK (test_column > 0)
);
CẬP NHẬT (từ chối giá trị âm hoàn toàn)
Tôi đã nhận thấy từ một vài nhận xét của bạn rằng bạn muốn các truy vấn có giá trị âm bị từ chối hoàn toàn và không được đặt thành 0
(dưới dạng giao dịch bình thường thành cột unsigned
sẽ thực hiện). Không có ràng buộc nào có thể thực hiện điều này nói chung (ít nhất là tôi biết), nếu bạn bật chế độ nghiêm ngặt (với STRICT_TRANS_TABLES
), bất kỳ truy vấn nào chèn một giá trị âm vào một cột không dấu sẽ bị lỗi (cùng với các lỗi chèn dữ liệu khác, chẳng hạn như giá trị enum
không hợp lệ).
Bạn có thể kiểm tra nó bằng cách chạy lệnh sau đây trước khi bạn chèn-lệnh:
SET @@SESSION.sql_mode = 'STRICT_TRANS_TABLES';
Và nếu nó làm việc cho bạn, bạn có thể cập nhật cấu hình MySQL của bạn với sql-mode="STRICT_TRANS_TABLES"
hoặc sử dụng SET @@GLOBAL.sql_mode = 'STRICT_TRANS_TABLES';
(Tôi không chắc chắn nếu lệnh SET
sẽ ảnh hưởng đến cấu hình mysql toàn cục, vì vậy có thể tốt hơn để cập nhật tệp cấu hình thực).
'unsigned' <> tích cực. 'unsigned' == không âm. – maxhb