سؤال

هل هناك طريقة بسيطة لتعديل جدول في إصدارات SQLite الأخيرة بحيث يطابق مخطط محدد مسبقا؟

مخطط:

war_id INTEGER NOT NULL, 
clanname VARCHAR(64), 
clanhomepage VARCHAR(128), 
date DATETIME, 
server VARCHAR(64), 
warmode_id INTEGER, 
squad_id INTEGER, 
notes TEXT, clantag String(16), 
PRIMARY KEY (war_id), 
FOREIGN KEY(warmode_id) REFERENCES warmodes (warmode_id), 
FOREIGN KEY(squad_id) REFERENCES squads (squad_id), 
FOREIGN KEY(orgamember_id) REFERENCES users (user_id)

الآن أريد إدراج clantag varchar (16) بعد clanname بحيث تكون متوافقة مع الإعدادات الأخرى.

أنا لا أمانع في التصدير، والخندق، وإعادة إنشائه، لكنني أتساءل إذا كان هناك خيار للقيام بذلك دون ذلك، مع إعطاء قواعد بيانات SQL الأخرى يمكن أن تعالج ذلك ...

هل كانت مفيدة؟

المحلول

يدعم SQLite إضافة أعمدة، كما يظهر هنا. وبعد القيد الوحيد الذي ستواجهه هو أن العمود سيكون في نهاية الجدول، ولكن لا ينبغي أن يكون طلب عمود الاستخدام العادي مشكلة. الحل البديل هو إنشاء جدول جديد مع التعريف الجديد، وإدراج جميع البيانات الخاصة بك في ذلك، وإسقاط الجدول القديم وإعادة تسمية الجدول الجديد، مثل هذا:

BEGIN TRANSACTION;
CREATE TABLE War_TMP( 
    war_id INTEGER NOT NULL, 
    clanname VARCHAR(64), 
    clantag VARCHAR(16),
    clanhomepage VARCHAR(128), 
    date DATETIME, 
    server VARCHAR(64), 
    warmode_id INTEGER, 
    squad_id INTEGER, 
    notes TEXT, 
    PRIMARY KEY (war_id), 
    FOREIGN KEY(warmode_id) REFERENCES warmodes (warmode_id), 
    FOREIGN KEY(squad_id) REFERENCES squads (squad_id), 
    FOREIGN KEY(orgamember_id) REFERENCES users (user_id)
);

INSERT INTO War_TMP() SELECT war_id, clanname, "", clanhomepage,date,server,warmode_id,squad_id,notes FROM War;
DROP TABLE War;

ALTER TABLE War_TMP RENAME TO War;

COMMIT;
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top