背景:我正在编写一个使用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中执行此操作。希望。
感谢您的帮助。
答案 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)
);
或者,您仍然可以制作name
列UNIQUE
答案 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
解释反动的跑狗的清除行为。