2012-01-09 13 views
6

क्या उनके mysql में int int फ़ील्ड है जहां नकारात्मक संख्याओं की अनुमति नहीं है? या अधिक विशेष रूप से यदि फ़ील्ड में ऋणात्मक संख्या डाली जाती है तो यह शून्य डालेगी। मैं यह पूछता हूं क्योंकि हमारे पास स्कोरिंग सिस्टम है और हम लोगों को नकारात्मक स्कोर करने की अनुमति नहीं देते हैं। तो यदि उनका स्कोर शून्य तक पहुंच जाता है, तो यह इसके बजाय शून्य डाल देगा। मैं यह देखने के लिए उपयोगकर्ता के स्कोर से पूछताछ किए बिना ऐसा करने की कोशिश कर रहा हूं कि यह शून्य हो जाएगा या नहीं।mysql नकारात्मक संख्याओं को रोकता है

उत्तर

12

डीडीएल परिवर्तन (आईएनटी संयुक्त राष्ट्र) के अलावा अन्य लोगों ने सिफारिश की है, मैं भी आपके आवेदन तर्क को बदल दूंगा। कहते हैं:

मैं जाँच करने के लिए उपयोगकर्ता के स्कोर क्वेरी करने के लिए अगर यह bellow शून्य गिर जाएगी बिना यह करने के लिए कोशिश कर रहा हूँ

आप स्पष्ट रूप से एक अलग में जांच करने के लिए नहीं है। क्वेरी:

UPDATE your_table 
    SET score = GREATEST(score + ?, 0) -- This '?' is the adjustment to the score 
WHERE user_id = ? 

अब आपका आवेदन शून्य से नीचे गिरने के लिए score अद्यतन नहीं कर सकता है, न ही यह SQL मोड के आधार पर त्रुटियों या चेतावनियां उत्पन्न करेगा।

+0

यह एक बहुत ही उपयोगी विचार है। मैंने कुछ फ़ील्ड को हस्ताक्षरित करने के लिए बदल दिया था, लेकिन उन्होंने मौजूदा त्रुटि हैंडलिंग विधियों को ट्रिगर किया और मुझे उन्हें हटाना पड़ा। जांच के लिए एक व्यर्थ क्वेरी/कनेक्शन से बचने के लिए यह उपयोगी है। – M1ke

9

हां। आप int फ़ील्ड बना सकते हैं और इसे UNSIGNED के रूप में चिह्नित कर सकते हैं।

enter image description here

MySQL 5.0 Reference Manual से:

INT[(M)] [UNSIGNED] [ZEROFILL] 

A normal-size integer. The signed range is -2147483648 to 2147483647. 
The unsigned range is 0 to 4294967295. 
+0

लेकिन बिना हस्ताक्षर किए गए int कॉलम को पूर्णांक डालने का प्रयास करने से त्रुटि – Raaghu

4

MySQL पूर्णांक प्रकार के लिए एक UNSIGNED क्वालीफायर है।

नकारात्मक मूल्यों शून्य से संबद्ध कर दिया जाएगा, लेकिन एक चेतावनी उत्पन्न करेगा:

mysql> create table test (id int(5) unsigned not null); 
Query OK, 0 rows affected (0.05 sec) 

mysql> insert into test values (-1), (5), (10); 
Query OK, 3 rows affected, 1 warning (0.01 sec) 
Records: 3 Duplicates: 0 Warnings: 1 

mysql> select * from test; 
+----+ 
| id | 
+----+ 
| 0 | 
| 5 | 
| 10 | 
+----+ 
3 rows in set (0.01 sec) 
+0

त्रुटि नहीं होगी अगर चेतावनी में त्रुटि हो रही है तो चेतावनी एक mysql त्रुटि का कारण बन जाएगी? – user962449

+0

@ user962449 मुझे नहीं पता, मैंने कभी ऐसा करने में त्रुटि को चालू नहीं किया है। आप कोशिश क्यों नहीं करते? – Alnitak

1

आप सख्त एसक्यूएल मोड में चला रहे हैं कि यह एक त्रुटि है और एक सम्मिलित/अपडेट विफल हो जाएगा फेंक होगा।

मैं इस तरह की चीज़ के लिए उपयोगकर्ता नाम से परिभाषित फ़ंक्शन बनाता हूं। (इस मामले में एक बहुत छोटा "अगर (expr1, expr2, expr3)" चाल करेगा

संबंधित मुद्दे