SQLite 替换现有列中的数据

Posted

技术标签:

【中文标题】SQLite 替换现有列中的数据【英文标题】:SQLite replacing data in existing column 【发布时间】:2015-10-22 19:42:44 【问题描述】:

对 SQLite 非常陌生,并且有一个对我很有帮助的基本问题。如果我有一个如下所示的表格:

_id   NAME
1     Mark
2     Bob

假设我在第 2 行中执行了一个插入语句并输入了名称 John。表格会是这样吗:

_id   NAME
1     Mark
2     John

或者我是否必须查询数据库,查看第 2 行是否已经包含名称,如果有,将其替换为 John?换句话说,它不会自动替换那里的内容?

【问题讨论】:

How do I do a simple 'Find and Replace" in MsSQL?的可能重复 AFAIK INSERT 语句和 UPDATE 语句不同。 那么当使用 INSERT 语句插入已经有数据的列时会发生什么。它根本没有做任何事情吗? 【参考方案1】:

基本上有3种方法可以改变表格内容:

INSERT:这将始终向表中添加新行 更新:这将更改表中的现有行 DELETE:这将删除表中的现有行

假设您的表是这样定义的:

CREATE TABLE test (
    _id  INT NOT NULL AUTO_INCREMENT,
    Name varchar(32),
    PRIMARY KEY (id)
);

并且已经包含此数据:

_id NAME
1   Mark
2   Bob

如果你然后运行

INSERT INTO test (Name) VALUES ('John')

那么表格将如下所示:

_id NAME
1   Mark
2   Bob
3   John

请注意,您也可以这样做:

INSERT INTO test VALUES( 3, 'John' )

但是您必须知道3_id 列中的下一个可用号码。

如果您想更改 Name 所在行的 _id 2,您可以运行以下查询:

UPDATE test SET Name='John' WHERE _id = 2

【讨论】:

如果您的 _id 是 PRIMARY KEY 并且您使用现有的 _id 值插入到列中怎么办?例如,插入名称为 John 的第 2 列(主键)。假设该列已经有一个名称(Bob),但您使用 INSERT 输入另一个名称(John)。是否仍会创建新行或什么都不会发生? 首先,您不插入列,而是将行插入表中。但是,你会得到一个错误 - PRIMARY KEY 必须是唯一的。但是,如果您从表定义中省略了PRIMARY KEY(id),那么您将获得一个带有2, 'John' 的新行(并且带有2, 'Bob' 的旧行仍然存在)。我强烈建议您搜索“sql 介绍”(甚至还有 youtube 视频)并复习基础知识,以便了解术语。

以上是关于SQLite 替换现有列中的数据的主要内容,如果未能解决你的问题,请参考以下文章

如何根据日期列中的月份从 SQLite 中获取数据

SQLite、FTS、MATCH 和分隔列中的文本

仅更新 SQLite 列中的年份

使用 `executemany` 更新现有 SQLite3 数据库中的条目(使用 Python sqlite3)

从 SQLite 3 中的现有数据库创建脚本 [关闭]

如何使用游标从sqlite android中的多个列中获取数据