如何在db2中更新仍引用的主键

时间:2011-05-27 14:43:54

标签: sql db2 primary-key

背景:我正在编写一个使用Java for DB2(V9.5 for UNIX)访问的应用程序。 为了测试我做了这个:

CREATE TABLE country(
name VARCHAR(100) NOT NULL,
population BIGINT,
  PRIMARY KEY(name)
);

CREATE TABLE city(
name VARCHAR(100) NOT NULL,
country VARCHAR(100) NOT NULL,
  PRIMARY KEY(name),
  FOREIGN KEY(country) REFERENCES country(name)
);

这是我的问题:

DB2不支持“ON UPDATE CASCADE”,并且仍然不允许更改仍然引用的主键。那么,如果某个国家的名称仍被城市使用,我该如何更改?

我没有在Java中搜索实现这一点的解决方案(我可以插入新值,更新受影响的城市并删除旧值)必须有一种方法可以在DB2中执行此操作。希望。

感谢您的帮助。

2 个答案:

答案 0 :(得分:1)

问题在于你的设计。通常,插入后主键不应更改。您可能想要做的是:

CREATE TABLE country(
  id BIGINT,
  name VARCHAR(100) NOT NULL,
  population BIGINT,
  PRIMARY KEY(id)
);

CREATE TABLE city(
  id BIGINT,
  name VARCHAR(100) NOT NULL,
  country_id BIGINT NOT NULL,
  PRIMARY KEY(id),
  FOREIGN KEY(country_id) REFERENCES country(id)
);

或者,您仍然可以制作nameUNIQUE

答案 1 :(得分:1)

如果您对当前架构感兴趣,那么您可以分三步完成: -

INSERT INTO COUNTRY VALUES ('Peoples Democratic Republic of Judea', 3000000 - 299 );

UPDATE CITY SET COUNTRY = 'Peoples Democratic Republic of Judea' 
WHERE COUNTRY = 'Free Federal Judean Peoples Republic' ;

DELETE FROM COUNTRY WHERE NAME = 'Free Federal Judean Peoples Republic' ;

N.B。 - 299解释反动的跑狗的清除行为。