2014-01-14 82 views
0

比方说,我有3列讨论:更新主键值

表:表1 rec_no - >主键(整数) 产品 prodlocation

我会尽力做一个创纪录的转变

update table1 set rec_no = rec_no - 1 - >工作正常

update table1 set rec_no = rec_no + 1 - >失败,主键冲突

我明白我们不应该操纵数据,如果它是主键的一部分。

出于讨论的缘故,任何想法为什么第二个查询失败?如果两个查询均失败,我认为这是可以接受的

+0

主键违规通常意味着您尝试设置的值已经存在于另一条记录中。但是,您是否将这两个查询连接起来? –

+0

这两个查询都是单独的函数。我一次只运行一个查询。我的rec_no数据只是0到10之间的数字,无论是+1还是-1,数据仍然存在。 如果两个查询均失败,则会更容易。只有-1获得成功,这让我感到困惑。 – user3015739

回答

0

ON UPDATE CASCADE

您需要设置ON UPDATE CASCADE对于那些外键:

ALTER TABLE bar 
ADD CONSTRAINT FK_foo_bar 
FOREIGN KEY (fooid) REFERENCES foo(id) 
ON UPDATE CASCADE 

然后你只需更新FKS并参照领域也将被更新,作为交易的一部分:

UPDATE foo SET id = id + 1000 

请注意,要改变约束,他们需要被删除。