SQLITE-插入或更新而不更改ROWID值
如果存在,我需要更新表行,否则插入新行。 我试过: 但是,如果行存在,这个语句会更改行的ROWID,这就是我试图避免的(我需要ROWID:D) 我还试图找到一种从更新中获取某种返回值的方法,以防发生更新,但我仍然不明白如何。。。如果我可以从update语句中获得返回值,我可以选择是否继续插入 你对这个问题有什么建议或解决办法吗?或者我需要制作一个ROWID的副本并使用它来代替“纯”表ROWID吗 提前感谢,致以最良好的问候 ps:我在看,我想知道sqlite是否也有输出特殊单词,但谷歌没有帮我 ----阅读评论后编辑: 表模式示例SQLITE-插入或更新而不更改ROWID值,sqlite,sql-update,Sqlite,Sql Update,如果存在,我需要更新表行,否则插入新行。 我试过: 但是,如果行存在,这个语句会更改行的ROWID,这就是我试图避免的(我需要ROWID:D) 我还试图找到一种从更新中获取某种返回值的方法,以防发生更新,但我仍然不明白如何。。。如果我可以从update语句中获得返回值,我可以选择是否继续插入 你对这个问题有什么建议或解决办法吗?或者我需要制作一个ROWID的副本并使用它来代替“纯”表ROWID吗 提前感谢,致以最良好的问候 ps:我在看,我想知道sqlite是否也有输出特殊单词,但谷歌没有帮我
CREATE TABLE test (
table_id TEXT NOT NULL,
some_field TEXT NOT NULL,
PRIMARY KEY(table_id)
)
INSERT or REPLACE INTO test (table_id, some_field) VALUES ("foo","bar")
除了主键之外,您还需要指定您的
表\u id
是唯一的
:
sqlite> CREATE TABLE test (
table_id TEXT NOT NULL,
some_field TEXT NOT NULL,
PRIMARY KEY(table_id),
UNIQUE(table_id)
);
sqlite> insert or replace into test values("xyz", "other");
sqlite> select * FROM test;
xyz|other
sqlite> insert or replace into test values("abc", "something");
sqlite> insert or replace into test values("xyz", "whatever");
sqlite> select * FROM test;
abc|something
xyz|whatever
我测试了Chris的建议,但rowid仍然会改变。我认为最好的替代方法是进行选择,以查看是否已经存在具有该键的行。如果是,请更新,否则,请插入。。。好的旧款式,但保证有效。将其与select结合使用,如下所示
INSERT or REPLACE INTO test (ROWID, table_id, some_field)
VALUES ((SELECT ROWID from test WHERE table_id = 'foo' UNION SELECT max(ROWID) + 1 from test limit 1), 'foo','bar')
您可以发布一个表架构和完整的“insert或replace”语句吗?
ExecuteOnQuery
返回受影响的行数,因此如果更新返回0,请执行insert。
INSERT or REPLACE INTO test (ROWID, table_id, some_field)
VALUES ((SELECT ROWID from test WHERE table_id = 'foo' UNION SELECT max(ROWID) + 1 from test limit 1), 'foo','bar')