当前位置:  开发笔记 > 前端 > 正文

如何在SQLite中使用唯一ID插入重复行?

如何解决《如何在SQLite中使用唯一ID插入重复行?》经验,为你挑选了3个好方法。

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

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

如果没有明确的唯一列声明,则该语句将起作用,但声明了表的第一列rowID INTEGER NOT NULL PRIMARY KEY.是否有任何方法可以创建一个简单的语句,如上所述,在不知道表的模式的情况下工作(除了第一列)?



1> 小智..:

这可以使用*语法来完成,而不必知道表的模式(主键的名称除外).诀窍是使用"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

"CREATE TABLE ... AS SELECT"语句根据SELECT语句的结果创建并填充数据库表.使用CREATE TABLE AS创建的表没有PRIMARY KEY,也没有任何类型的约束.

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



2> Justin Niess..:

不需要.您需要知道表的模式才能正确编写insert语句.

您需要能够以下列形式编写语句:

insert into Table (column1, column2, column3) 
select column1, column2, column3
from OtherTable
where rowId = 5



3> Ed Marty..:

好吧,因为我无法按照我想要的方式执行此操作,所以我使用了隐式行id,它与我明确定义的rowId列具有相同的名称,所以现在我可以使用我在问题中的查询,它将使用新的rowId插入所有数据.为了使程序工作的休息,我刚换SELECT * FROM tableSELECT rowId,* FROM table,一切都很好.

推荐阅读
农大军乐团_697
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有