Sqlite में ALTER COLUMN


81

मैं sqlite में कॉलम कैसे बदलूं? इसमें हैPostgresql

ALTER TABLE books_book ALTER COLUMN publication_date DROP NOT NULL;

मेरा मानना ​​है कि वहाँ बिल्कुल भी किसी भी वर्ग के वर्ग में नहीं है, केवल वैकल्पिक तालिका समर्थित है।

कोई उपाय? धन्यवाद!


आप एक ALTER COLUMN सिंटैक्स के लिए पूछते हैं, लेकिन आप यह नहीं कहते कि आप क्या करना चाहते हैं। इससे मुझे लगता है कि यह बहुत व्यापक है। इसके अलावा बहुत कुछ कर सकते हैं, क्या आप pg उदाहरण की तरह अशक्त बाधा नहीं छोड़ रहे हैं?
इवान कैरोल

यदि आपका उपयोग किया गया intellj db टूल, जब आप कोलम को बदलते हैं तो यह आपके साइक्लाइट के लिए कमांड उत्पन्न करेगा।
मूर्ख

जवाबों:


111

Sqlite में कोई भी COLUMN नहीं है।

मेरा मानना ​​है कि आपका एकमात्र विकल्प यह है:

  • तालिका का नाम अस्थायी नाम पर रखें
  • बिना किसी बाधा के एक नई तालिका बनाएं
  • पुरानी तालिका की सामग्री को नए पर कॉपी करें
  • पुरानी तालिका निकालें

यह अन्य Stackoverflow जवाब विवरण में प्रक्रिया बताते हैं


64

हालांकि यह सही है कि कोई भी COLUMN नहीं है, यदि आप केवल कॉलम का नाम बदलना चाहते हैं, तो नॉट नाल बाधा न डालें, या डेटा प्रकार को बदलें, आप निम्न आदेशों के खतरनाक सेट का उपयोग कर सकते हैं :

PRAGMA writable_schema = 1;
UPDATE SQLITE_MASTER SET SQL = 'CREATE TABLE BOOKS ( title TEXT NOT NULL, publication_date TEXT)' WHERE NAME = 'BOOKS';
PRAGMA writable_schema = 0;

स्कीमा में परिवर्तन को फिर से लोड करने के लिए आपको अपने कनेक्शन को बंद या फिर से खोलना होगा या डेटाबेस को वैक्यूम करना होगा।

उदाहरण के लिए:

Y:\> **sqlite3 booktest**  
SQLite version 3.7.4  
Enter ".help" for instructions  
Enter SQL statements terminated with a ";"  
sqlite> **create table BOOKS ( title TEXT NOT NULL, publication_date TEXT NOT 
NULL);**  
sqlite> **insert into BOOKS VALUES ("NULLTEST",null);**  
Error: BOOKS.publication_date may not be NULL  
sqlite> **PRAGMA writable_schema = 1;**  
sqlite> **UPDATE SQLITE_MASTER SET SQL = 'CREATE TABLE BOOKS ( title TEXT NOT 
NULL, publication_date TEXT)' WHERE NAME = 'BOOKS';**  
sqlite> **PRAGMA writable_schema = 0;**  
sqlite> **.q**  

Y:\> **sqlite3 booktest**  
SQLite version 3.7.4  
Enter ".help" for instructions  
Enter SQL statements terminated with a ";"  
sqlite> **insert into BOOKS VALUES ("NULLTEST",null);**  
sqlite> **.q**  

संदर्भ निम्नलिखित:


pragma writable_schema
जब यह प्रागमा होता है, तो SQLITE_MASTER टेबल जिसमें डेटाबेस को साधारण अद्यतन, INSERT और DELETE स्टेटमेंट का उपयोग करके बदला जा सकता है। चेतावनी: इस प्रचार का दुरुपयोग आसानी से एक भ्रष्ट डेटाबेस फ़ाइल में हो सकता है।

[परिवर्तन तालिका] ( http://www.sqlite.org/lang_altertable.html से )
SQLite सीमित तालिका के सीमित उपसमूह का समर्थन करता है। SQLite में ALTER TABLE कमांड उपयोगकर्ता को एक तालिका का नाम बदलने या किसी मौजूदा तालिका में एक नया कॉलम जोड़ने की अनुमति देता है। एक स्तंभ का नाम बदलना, एक स्तंभ को हटाना, या एक तालिका से बाधाओं को जोड़ना या निकालना संभव नहीं है।

अन्य टेबल SYNTAX


7
इस विधि ने मेरे लिए काम किया, हालाँकि उन स्थितियों से बचने के लिए जिनमें कॉलम एक अलग क्रम में हो सकते हैं (जैसे कि पिछले ADD COLUMN कमांड से), मैंने उपयोग किया: UPDATE SQLITE_MASTER SET SQL = प्रतिस्थापित (SQL, '[MyContumn] पूर्णांक नहीं NULL') , '[MyColumn] पूर्णांक NULL') WHERE NAME = 'MyTable'। इसके अलावा, लेन-देन के भाग के रूप में इसे चलाने के लिए सावधान रहें - यह पहले के कुछ लेनदेन आदेशों को चलने से रोक सकता है।
रॉस

32

SQLite सीमित तालिका के सीमित उपसमूह का समर्थन करता है। SQLite में ALTER TABLE कमांड उपयोगकर्ता को एक तालिका का नाम बदलने या किसी मौजूदा तालिका में एक नया कॉलम जोड़ने की अनुमति देता है। एक स्तंभ का नाम बदलना, एक स्तंभ को हटाना, या एक तालिका से बाधाओं को जोड़ना या निकालना संभव नहीं है। लेकिन आप निम्न चरणों द्वारा तालिका स्तंभ डेटाटाइप या अन्य संपत्ति को बदल सकते हैं।

  1. BEGIN परिवहन;
  2. निर्माण अस्थायी टेबल t1_backup (ए, बी);
  3. INSERT INTO t1_backup a, b FROM t1 का चयन करें;
  4. डीआरओपी टेबल टी 1;
  5. रचना T1 (ए, बी);
  6. INSERT INTO t1 a, b FROM t1_backup का चयन करें;
  7. ड्रॉप टेबल t1_backup;
  8. COMMIT

अधिक विवरण के लिए आप लिंक का उल्लेख कर सकते हैं ।


तालिका का नाम बदलने के लिए: तालिका 2 में तालिका तालिका को फिर से लिखें;
लाइव-लव

अनुक्रमित मत भूलना। अनुक्रमणिका के साथ कथन बनाने के लिए .schema चलाएँ।
लाइव-लव
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.