gpt4 book ai didi

sql - 如何在具有唯一 ID 的 SQLite 中插入重复行?

转载 作者:IT王子 更新时间:2023-10-29 06:19:20 26 4
gpt4 key购买 nike

这看起来很简单:我想在 SQLite 表中复制一行:

INSERT INTO table SELECT * FROM table WHERE rowId=5;

如果没有明确的唯一列声明,该语句将起作用,但表的第一列被声明为 rowID INTEGER NOT NULL PRIMARY KEY。有什么方法可以创建一个像上面那样的简单语句,它可以在不知道表的模式(除了第一列)的情况下工作吗?

最佳答案

这可以使用 * 语法来完成,而无需知道表的架构(主键名称除外)。诀窍是使用“CREATE TABLE AS”语法创建一个临时表。

在这个例子中,我假设有一个现有的、填充的、名为“src”的表,带有一个名为“id”的 INTEGER PRIMARY KEY,以及其他几个列。要复制“src”的行,请在 SQLite3 中使用以下 SQL:

CREATE TEMPORARY TABLE tmp AS SELECT * FROM src;
UPDATE tmp SET id = NULL;
INSERT INTO src SELECT * FROM tmp;
DROP TABLE tmp;

上面的例子复制了表“src”的所有行。要只复制所需的行,只需将 WHERE 子句添加到第一行即可。此示例有效,因为表“tmp”没有主键约束,但“src”有。将 NULL 主键插入 src 会导致它们被赋予自动生成的值。

来自 sqlite 文档:http://www.sqlite.org/lang_createtable.html

A "CREATE TABLE ... AS SELECT" statement creates and populates a database table based on the results of a SELECT statement. A table created using CREATE TABLE AS has no PRIMARY KEY and no constraints of any kind.

如果你真的想变得很花哨,你可以添加一个触发器来更新第三个表,该表将旧的主键映射到新生成的主键。

关于sql - 如何在具有唯一 ID 的 SQLite 中插入重复行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1716320/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com