2013-06-11 8 views
5

मैं एक SQLite तालिका है (SQLite संस्करण 3.7.3) जहां nulls प्राथमिक कुंजी स्तंभ में डाला undesirably ऑटो वृद्धि की जाती किया जा रहा है:autoincrementing पूर्णांक प्राथमिक कुंजी को रोकने?

sqlite> CREATE TABLE foo(bar INTEGER NOT NULL PRIMARY KEY); 
sqlite> INSERT INTO foo(bar) VALUES(NULL); 
sqlite> SELECT * FROM foo; 
1 

sqlite docs में, यह पता चलता है कि स्तंभ के लिए AUTOINCREMENT कीवर्ड जोड़ने इस व्यवहार बनाना चाहिए, लेकिन वहाँ में किसी कीवर्ड ऑटो incrementing रोकने होने के लिए प्रकट नहीं होता है ...

मैंने यह भी पाया है कि मैं SQLITE_OMIT_AUTOINCREMENTcompile option साथ SQLite निर्माण कर सकते हैं, लेकिन मैं निष्क्रिय करने के लिए नहीं करना चाहते हैं व्यवहार वैश्विक स्तर पर, सिर्फ इस विशेष कॉलम के लिए।

sqlite> CREATE TABLE FOO(bar integer NOT NULL); 
sqlite> INSERT INTO FOO(bar) VALUES(NULL); 
SQL error: foo.bar may not be NULL 

मैं कैसे तालिका ताकि शून्य मान खारिज हो चुके हैं और प्राथमिक कुंजी बाधा रखने को परिभाषित कर सकते हैं:

दिलचस्प बात यह है कि अगर मैं PRIMARY KEY बाधा शामिल नहीं है, मैं वांछित व्यवहार मिलता है?

उत्तर

6

Autoincrement व्यवहार केवल INTEGER PRIMARY KEY के रूप में घोषित कॉलम पर लागू होता है। उसे निष्क्रिय करने तो सबसे आसान तरीके हैं:

  • UNIQUE बजाय PRIMARY KEY के रूप में स्तंभ घोषित।
  • INTEGER के बजाय कॉलम प्रकार को INT के रूप में घोषित करें।

ध्यान दें कि या तो एक आप पूर्णांक आत्मीयता के बजाय केवल पूर्णांकों शामिल करने के लिए विवश किया जा रहा के साथ एक स्तंभ दे देंगे। जब आप डेटा डालने की आवश्यकता (टेबल पुनः बनाने के बाहर) autoincrement निष्क्रिय करने के लिए

+0

वाह, दस्तावेज में ठीक है ...: डी –

+1

आप शायद अपनी तालिका में "बेकार" रिकॉर्ड्स के निर्माण को रोकने के लिए न्यूल के साथ अद्वितीय को जोड़ना चाहते हैं। – Timo

-2

एक तरीका यह sqlite3 में आयात उपकरण का उपयोग करने के लिए है:

यदि आपके पास इस तरह की एक तालिका:

CREATE TABLE [table1] ([ID] integer PRIMARY KEY AUTOINCREMENT NOT NULL, [col1] TEXT); 

आप अपनी डेटा फ़ाइल के साथ इस पर आयात आदेश चलाते हैं:

ID col1 
10 abc 
20 def 

import myfile.txt table1 

यह पंक्तियां आयात करेगा, और यह autoincrement सुविधा उपेक्षा करेंगे।

+0

कम से कम मेरे लिए काम नहीं करता है। 'Sqlite3 --version 3.8.10.2 2015-05-20 18:17:19 2ef4f3a5b1d1d0c4338f8243d40a2452cc1f7fe4' के साथ परीक्षण – Timo

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