SQLite3和Alter table。。之后

SQLite3和Alter table。。之后,sql,sqlite,alter-table,Sql,Sqlite,Alter Table,在最近的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_i

在最近的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)
现在我想插入 克兰塔格·瓦尔查尔(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;

粘贴的架构中可能有错误:它已包含名为clantag的列。我想这是偶然的?我建议您花些时间阅读SQLite文档。它与其他SQL数据库有很大的不同。您认为您不熟悉SQLite特有的类型系统。是的,这是偶然的。。。想发布一个未触及的,而不是修改的。你是对的,我没有使用太多sqlite本身的内部工作,因为我的代码主要是数据库无关的,因此不能使用单个代码中的许多特定内容。这就是我期望的结果:)很高兴知道,我没有忽略比这更简单的东西。