2009-12-10 16 views

उत्तर

73

SQLite alter table drop constraint कमांड का समर्थन नहीं करता है। आपको बिना किसी बाधा के एक नई टेबल बनाने, डेटा स्थानांतरित करने, फिर पुरानी तालिका को हटाने की आवश्यकता होगी।

मुझे लगता है कि निम्नलिखित की तरह कुछ काम करना चाहिए:

CREATE TABLE child2 ( 
    id INTEGER PRIMARY KEY, 
    parent_id INTEGER, 
    description TEXT 
); 
INSERT INTO child2 (id, parent_id, description) 
    SELECT id, parent_id, description FROM CHILD; 
DROP TABLE child; 
ALTER TABLE child2 RENAME TO child; 

तुम भी ऊपर यदि आप इसे स्थानांतरित नहीं करना चाहती सभी बयानों से PARENT_ID बाहर छोड़ सकते हैं।

+0

दुखद चेहरा। मैंने यही पाया। मुझे उम्मीद थी कि मैं 'ओमटेड' डॉक्टर को गलत समझ रहा था। –

+1

आप चरण 1 और 2 को ऊपर एक एसक्यूएल स्टेटमेंट मेथिंक में भी जोड़ सकते हैं: "बच्चे से चयन करें * तालिका से बच्चे को चुनें;" हालांकि आपको पीके बाधा मैन्युअल रूप से जोड़ना होगा। – chacmool

+1

@chacmool तालिका बनाने के बाद आप मैन्युअल रूप से पीके बाधा नहीं जोड़ सकते हैं। [SQLite डॉक्स] (https://www.sqlite.org/lang_createtable.html) –

4

मुझे लगता है कि यह एक आसान, अधिक संक्षिप्त दृष्टिकोण है:

copy db.sqlite3 backup-db.sqlite3 
echo .dump tablename | sqlite3 db.sqlite3 > modify.sql 
(now delete or change the constraint in modify.sql) 
echo drop table tablename; | sqlite3 db.sqlite3 
sqlite3 db.sqlite3 < modify.sql 

अब आप नए डेटाबेस तालिका redump और मतभेदों की तुलना कर सकते हैं।

+1

लिनक्स/sh के तहत, आपको 'echo ड्रॉप तालिका tablename \;' का उपयोग करने की आवश्यकता हो सकती है। अर्धविराम से पहले बैकस्लैश पर ध्यान दें। – jftuga

+1

यह भी विचार करें कि पक्सडीब्लो के दृष्टिकोण के साथ, आप पूरे ऑपरेशन को एक लेनदेन के अंदर डाल सकते हैं जो किसी भी चरण में विफल होने पर वापस रोल करेगा, जिससे आपके डीबी को मूल स्थिति में छोड़ दिया जा सकेगा। आपके दृष्टिकोण के साथ, आप चरण 2, 4 और 5 पर त्रुटियों की जांच करना चाहते हैं और तदनुसार निरस्त करना चाहते हैं, जो कोड को बहुत कम संक्षिप्त बनाता है। –

+0

SQLiteStudio आपको संपूर्ण डेटाबेस को SQL के रूप में निर्यात करने की अनुमति देता है। जो आपको कमांड लाइन उपकरण के साथ jftuga की तरह आगे बढ़ने की अनुमति देता है। –