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