我的表有一个TEXT主键
CREATE TABLE tbl1{
a1 TEXT PRIMARY KEY,
...
);
(a1
列是另一个表中的外键)
如何更改a1
?
如果我这样做
UPDATE tbl1 SET a1 =?在哪里a1 =?
我收到了约束违规错误
答案 0 :(得分:4)
你永远不应该改变主键;最好使用INTEGER PRIMARY KEY并将实际的URL作为普通数据列。
如果您确实想要更改作为外键目标的键,则应将外键约束声明为deferred,以便您可以在同一事务中调整外键值。
答案 1 :(得分:1)
问题在于您的表具有单列,该列是主键,并且是另一张表的外键。这表明数据库的数据库设计是错误的。 除非您可以更改数据库结构,否则需要在该其他表中添加正确的值才能更改主键值。 那就是“插入表constrainingTable(key,val)值(A,B)”,然后执行更新tbl set a1 = A,其中a1 = KEY。 忽略了人们告诉您永远不要更改主键的信息,有关如何构建主键的理论体系非常丰富。主键应该唯一地标识一行的值列(请参见数据库理论),例如,典型的键是PNR,SSN,序列号,移动电话号码,有时还包括名称,地址,街道,国家/地区等多个值。仅当您生成新值或使用适当的主键遇到实际问题时,才应使用生成的键。