如何使用“ON UPDATE CASCADE”创建外键在甲骨文上?

发布于 2024-08-02 07:05:31 字数 116 浏览 8 评论 0原文

在 MS SQL Server 中,可以使用 ON UPDATE CASCADE 选项创建外键,因此每当您更新主键中的一列时,其他表中的外键也将被更新数据库管理系统。

那么,在Oracle中如何实现呢?

In MS SQL Server it is possible to create a foreign key with ON UPDATE CASCADE option, so whenever you update one of the columns in the primary key, the foreign keys in other tables will also be update by the DBMS.

So, how to do it in Oracle?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

泪痕残 2024-08-09 07:05:31

Oracle 不允许使用“ON UPDATE CASCADE”的外键约束。

您有以下几个选择。

创建外键,并创建“更新时”触发器。
使用下面的包(需要安装在数据库中)。

http://tkyte.blogspot.com/2009/10/httpasktomoraclecomtkyteupdatecascade.html

如果您还有其他问题或需要更多信息,请告诉我。

Oracle does not allow a Foreign Key constraint with “ON UPDATE CASCADE”.

Here are a couple of options you have.

Create the Foreign Key, and create an “On Update” trigger.
Make use of the package below (needs to be installed in the db).

http://tkyte.blogspot.com/2009/10/httpasktomoraclecomtkyteupdatecascade.html

Let me know if you have additional questions or need more information.

一杯敬自由 2024-08-09 07:05:31

数据库触发会执行以下操作吗工作适合你吗?

这是 Oracle 文档 11g 数据完整性的主题(以防万一您感兴趣)。

Would a database trigger do the job for you ?

Here is the Oracle doc on the subject of Data Integrity for 11g (just incase you were interested).

伊面 2024-08-09 07:05:31

您不能在更新级联上使用,但您可以创建一个触发器来解决该问题:

create table tab1(
pk int PRIMARY KEY,
aa int);

create table tab2(
pk int PRIMARY KEY,
tab1_pk int,
FOREIGN KEY(tab1_pk) REFERENCES tab1(pk));

------------------------------------------

create or replace trigger tab1_pkUpdate
    after update of pk on tab1
    for each row
 begin
    update tab2 s
    set s.tab1_pk = :new.pk
    where s.tab1_pk = :old.pk;
end;
/

You can't use on update cascade, but you can create a trigger that will resolve the issue:

create table tab1(
pk int PRIMARY KEY,
aa int);

create table tab2(
pk int PRIMARY KEY,
tab1_pk int,
FOREIGN KEY(tab1_pk) REFERENCES tab1(pk));

------------------------------------------

create or replace trigger tab1_pkUpdate
    after update of pk on tab1
    for each row
 begin
    update tab2 s
    set s.tab1_pk = :new.pk
    where s.tab1_pk = :old.pk;
end;
/
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文