是否有一种简单的方法来修改最近的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数据库可以处理...
答案 0 :(得分:3)
SQlite支持添加列,shown here。您将面临的唯一限制是该列将位于表的末尾,但对于正常使用,列顺序应该不是问题。另一种解决方案是使用新定义创建一个新表,将所有数据插入其中,删除旧表并重命名新表,如下所示:
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;