如何在sqlite中更改记录的主键?

问题描述 投票:4回答:2

我的表具有TEXT主键

CREATE TABLE tbl1{
  a1 TEXT PRIMARY KEY,
  ...
);

((a1列是另一个表中的外键)

如何更改a1的值?

如果我这样做

更新tbl1 SET a1 =吗?在哪里a1 =?

我收到约束违规错误

sqlite constraints primary-key
2个回答
5
投票

您不应该更改主键;最好使用INTEGER PRIMARY KEY,并且将实际的URL作为普通数据列。

如果您确实想更改作为外键目标的键,则应将外键约束声明为deferred,以便能够在同一事务中调整外键值。


1
投票

问题是您的表具有单列,该列是主键,并且是另一张表的外键。这表明数据库的数据库设计是错误的。除非您可以更改数据库结构,否则需要在该其他表中添加正确的值才能更改主键值。那就是“插入表constrainingTable(key,val)值(A,B)”,然后执行更新tbl set a1 = A,其中a1 = KEY。忽略了人们告诉您永远不要更改主键的信息,有关如何构建主键的理论体系非常丰富。主键应该唯一地标识一行的值列(请参见数据库理论),例如,典型的键是PNR,SSN,序列号,移动电话号码,有时还包括名称,地址,街道,国家/地区等多个值。仅当您生成新值或使用适当的主键遇到实际问题时,才应使用生成的键。

© www.soinside.com 2019 - 2024. All rights reserved.