2011-02-13 111 views
0

我试图合并具有相同表(和模式)的几对SQLite3数据库。有些表格非常简单,只有一些明文数据,但有些表格有主键。有些密钥是唯一的,如URL(例如url LONGVARCHAR PRIMARY KEY),其中一些只是简单的整数索引,但未设置为自动增量(例如id INTEGER PRIMARY KEY)。将行添加到主键可能已存在的SQLite数据库中

我发现了几个关于合并数据库的主题(而且我已经手动合并了一对非主键数据库而不费力),但是我担心这两个主键可能已经存在。

我的问题是,如果一行被插入到一个数据库中已经存在一个具有相同密钥的行,会发生什么?它应该覆盖具有该键的行吗?我希望它会将它们追加到表中并更新密钥,但只有当密钥的数字组件设置为自动递增正确时才有效?

任何人都可以确认我的假设 - 如果可能的话,提供一个最简单的方法来追加这样的行的建议?

非常感谢。

回答

0

如果你尝试插入一个重复的主键,它会给你一个错误,不允许插入。 SQLite也支持'REPLACE INTO'语法,它将在一个重复的主键上进行更新。

如果你想附加重复项,你将不得不检查一个带有该项的字段是否已经存在,如果是,那么将该项改为一个新的值。正确的做法可能取决于您的应用程序。对于整数键,你可以采取最大+ 1,但对于url键,不清楚正确的行为应该是什么。

+0

对;当键存在时插入失败,但更新覆盖该行 - 为什么没有APPEND命令? `:-(`对于URL键,它主要是用最新数据库中的同一行更新行。是否有一种方法可以自动执行max + 1方法?我正在使用SQLite3命令行程序;是 – Synetech 2011-02-13 06:52:12

+0

有*是*一个APPEND语句;我们称之为INSERT。键是你的朋友 – 2011-02-13 12:57:25

1

如果您将目标表中的主键设置为自动增量,您应该没有问题。

因此,当你做了批量插入命令或者你正在用来向新表中插入值的任何东西时,你根本就不提供主键字段的输入,也不会重复。

列:

ID名称

只是不提供ID字段,即/

INSERT INTO表名( “Synetech”)

插入只想用这种添加表中下一个可用的ID索引。

祝你好运!

相关问题