微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何检查Oracle SQL中是否存在外键约束

如何解决如何检查Oracle SQL中是否存在外键约束

首先非常感谢您的帮助。我在这里是因为我不知道如何为Video表编程约束,以便在Video表内创建新行之前检查“类别”表中是否存在类别。

类别表:

CREATE TABLE Categories(
cat_id integer,cat_name varchar2(128)
CONSTRAINT pk_cat PRIMARY KEY (cat_id,cat_name) 
);

视频表:

CREATE TABLE Video(
video_id integer PRIMARY KEY,title varchar2(128) NOT NULL,description varchar2(128) NOT NULL,categorie varchar2(32),CONSTRAINT fk_vid_cat FOREIGN KEY (categorie) REFERENCES Categories,--CONSTRAINT ck_cat_exists CHECK categorie EXISTS (cat_name) REFERENCES Categories
) ;

我不知道是否可以直接从这里完成,非常感谢您的再次帮助...

解决方法

您想要的是 id 而不是名称:

CREATE TABLE Videos (
    video_id integer PRIMARY KEY,title varchar2(128) NOT NULL,description varchar2(128) NOT NULL,cat_id integer,CONSTRAINT fk_vid_cat FOREIGN KEY (cat_id) REFERENCES Categories(cat_id)
) ;

如果要确保每个视频都有一个类别,请声明cat_idNOT NULL

拥有主键的目的是使您不必在整个数据库中重复字符串值。

,

您要的就是外键约束功能提供的功能。

我将从更改类别表的定义开始,以便它仅将cat_id用作主键(而主键中也有cat_name,这实际上没有意义):

create table categories(
    cat_id integer,cat_name varchar2(128)
    constraint pk_cat primary key (cat_id) 
);

然后您可以在视频表中引用它:

create table video(
    video_id integer,title varchar2(128) not null,description varchar2(128) not null,constraint pk_video primary key (video_id),constraint fk_vid_cat foreign key (cat_id) references categories(cat_id),) ;

请注意,我重命名了该列并更改了它的数据类型,使其与所引用的列一致。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。