आप कीवर्ड का उपयोग करेंगे अहस्ताक्षरित
यह इंगित करने के लिए कि पूर्णांक "चिह्न" की अनुमति नहीं देता है (अर्थात - यह केवल सकारात्मक हो सकता है):
CREATE TABLE test (
test_column int(11) unsigned
);
आप संख्यात्मक डेटा प्रकारों (हस्ताक्षरित और अहस्ताक्षरित) के बारे में अधिक पढ़ सकते हैं यहां ।
जहाँ तक वास्तविक बाधा . है नकारात्मक मानों को सम्मिलित करने से रोकने के लिए, MySQL में एक <है। कोड>जांच करें
खंड जिसका उपयोग तालिका बनाएं
में किया जा सकता है बयान, हालांकि, दस्तावेज़ीकरण के अनुसार:
संदर्भ के लिए, यहां बताया गया है कि आप इसका उपयोग कैसे करेंगे (और हालांकि यह बिल्कुल ठीक निष्पादित होगा, यह कुछ भी नहीं करता है - जैसा कि मैनुअल कहता है):
CREATE TABLE test (
test_column int(11) unsigned CHECK (test_column > 0)
);
अपडेट करें (नकारात्मक मानों को पूरी तरह से खारिज करना)
मैंने आपकी कुछ टिप्पणियों से देखा है कि आप चाहते हैं कि नकारात्मक मानों वाली क्वेरी को पूरी तरह से खारिज कर दिया जाए और 0
पर सेट न किया जाए (एक अहस्ताक्षरित
. में एक सामान्य लेनदेन के रूप में कॉलम करेगा)। कोई बाधा नहीं है जो इसे सामान्य रूप से कर सकती है (जिसे मैं कम से कम जानता हूं), हालांकि, यदि आप सख्त-मोड चालू करते हैं (STRICT_TRANS_TABLES
) अहस्ताक्षरित कॉलम में नकारात्मक मान डालने वाली कोई भी क्वेरी एक त्रुटि के साथ विफल हो जाएगी (किसी भी अन्य डेटा-सम्मिलन त्रुटियों के साथ, जैसे कि एक अमान्य enum
मूल्य)।
आप अपने इंसर्ट-कमांड से पहले निम्न कमांड चलाकर इसका परीक्षण कर सकते हैं:
SET @@SESSION.sql_mode = 'STRICT_TRANS_TABLES';
और अगर यह आपके लिए काम करता है, तो आप या तो अपने MySQL कॉन्फिगर को sql-mode="STRICT_TRANS_TABLES"
से अपडेट कर सकते हैं या SET @@GLOBAL.sql_mode ='STRICT_TRANS_TABLES';
का उपयोग करें (मुझे यकीन नहीं है कि SET
कमांड हालांकि वैश्विक mysql कॉन्फिगरेशन को प्रभावित करेगा, इसलिए वास्तविक कॉन्फिग-फाइल को अपडेट करना बेहतर हो सकता है)।