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

时间:2013-10-11 10:58:04

标签: sqlite pdo constraints primary-key

我的表有一个TEXT主键

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

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

如何更改a1

的值

如果我这样做

UPDATE tbl1 SET a1 =?在哪里a1 =?

我收到了约束违规错误

2 个答案:

答案 0 :(得分:4)

你永远不应该改变主键;最好使用INTEGER PRIMARY KEY并将实际的URL作为普通数据列。

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

答案 1 :(得分:1)

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