如何解决如何更新db2中仍然引用的主键
| 背景:我正在编写一个将Java用于DB2(对于UNIX是V9.5)访问的应用程序。 为了测试,我这样做: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中必须有一种方法可以做到这一点。希望。
谢谢你的帮助。
解决方法
问题出在您的设计中。通常,主键插入后不应更改。您可能想做的是:
CREATE TABLE country(
id BIGINT,name VARCHAR(100) NOT NULL,population BIGINT,PRIMARY KEY(id)
);
CREATE TABLE city(
id BIGINT,country_id BIGINT NOT NULL,PRIMARY KEY(id),FOREIGN KEY(country_id) REFERENCES country(id)
);
(可选)您仍然可以将name
列设为UNIQUE
, 如果您使用当前架构,则可以分三个步骤进行:
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
用于清除反流犬。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。