我正在尝试合并几对具有相同表(和模式)的SQLite3数据库。有些表非常简单,只有普通数据行,但有些表有主键。有些键是唯一的,如URL(例如url LONGVARCHAR PRIMARY KEY
),其中一些只是简单的整数索引,但未设置为自动递增(例如id INTEGER PRIMARY KEY
)。
我找到了几个关于合并数据库的主题(我已经不费力地手动合并了一对非主键数据库),但我担心那两个可能已存在的密钥。
我的问题是,如果将一行插入到已存在具有相同密钥的行的数据库中会发生什么?它应该覆盖具有该键的行吗?我希望它会将它们附加到表并更新密钥,但是只有当密钥的数值组件设置为自动递增时才能正常工作?
任何人都可以确认我的假设 - 并且如果可能的话,提供关于追加这些行的最简单方法的建议吗?
非常感谢。
答案 0 :(得分:1)
如果将目标表中的主键设置为自动递增,则应该没有问题。
因此,当您执行批量插入命令或用于将值插入新表时使用的任何内容时,您只是不为主键字段提供输入,并且永远不会重复。
列:
ID名称
只是不提供ID字段,即/
INSERT INTO tableName(“Synetech”)
插入只会在表中添加下一个可用的ID索引。
祝你好运!
答案 1 :(得分:0)
如果您尝试INSERT重复的主键,它将给您一个错误,不允许插入。 SQLite还支持'REPLACE INTO'语法,该语法将在重复的主键上更新。
如果要附加重复项,则必须检查具有该键的字段是否已存在,如果是,则将该键更改为某个新值。这样做的正确方法可能取决于您的应用程序。对于整数键,您可以采用max + 1,但对于url键,不清楚正确的行为应该是什么。