5

我有一个有 TEXT 主键的表

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

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

如何更改 的值a1

如果我做

更新 tbl1 设置 a1 = ?哪里 a1 = ?

我收到约束违规错误

4

2 回答 2

6

你永远不应该改变主键;使用INTEGER PRIMARY KEY并让实际 URL 成为普通数据列会是一个更好的主意。

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

于 2013-10-11T11:23:37.980 回答
1

问题是您的表有一个列,它是主键,并且是另一个表的外键。这表明数据库的数据库设计是错误的。除非您可以更改数据库结构,否则您需要在该其他表中添加正确的值以更改您的主键值。即“插入表约束表(key,val)值(A,B)”,然后执行update tbl set a1 = A where a1 = KEY。忽略那些告诉你永远不应该更改主键的人,关于应该如何构建主键的理论体系。主键应该唯一标识一行的值列(参见数据库理论),例如典型的键是 PNR、SSN、序列号、手机号码,有时还有多个值,如姓名、地址、街道、国家。

于 2019-11-13T08:52:31.783 回答