首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在db2中更新仍被引用的主键

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

Stack Overflow用户
提问于 2011-05-27 22:43:54
回答 2查看 4.4K关注 0票数 1

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

代码语言:javascript
运行
复制
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中做到这一点。但愿能去。

谢谢你的帮助。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-05-27 22:48:45

问题出在你的设计上。通常情况下,主键在插入后不应更改。您可能想要这样做:

代码语言:javascript
运行
复制
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
EN

Stack Overflow用户

发布于 2011-05-31 17:17:19

如果您是使用当前模式的stch,则可以通过三个步骤完成此操作:--

代码语言:javascript
运行
复制
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' ;

注:- 299说明清洗反动走狗的原因。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6153865

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档