SQLite3和Alter table。。之后
在最近的sqlite版本中,是否有一种简单的方法来修改表,使其与预定义的模式匹配 模式: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
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本身的内部工作,因为我的代码主要是数据库无关的,因此不能使用单个代码中的许多特定内容。这就是我期望的结果:)很高兴知道,我没有忽略比这更简单的东西。