首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Sql (Oracle)--无法插入值(可能是约束因素)

Sql (Oracle)--无法插入值(可能是约束因素)
EN

Stack Overflow用户
提问于 2018-05-15 21:08:14
回答 6查看 665关注 0票数 0

正如您在代码中看到的那样。三个表都有自己主键。protectmedalno和mastermedalno是player表的外键。protectmedalno不能为空。masterdealno可以为空。我先丢弃表保护器,然后丢弃master,最后一个丢弃的玩家。

桌手与桌长之间的关系较弱。

插入protector和master的值是没有问题的。但是将值插入到表player中,将会发生:*原因:外键值没有匹配的主键值。*操作:删除外键或添加匹配的主键。

我认为这是一个有约束的问题。

代码语言:javascript
复制
insert into player values('01','Joe','101','');
insert into player values('02','Elsa','102','201');

insert into protector values('101','Dragon');
insert into protector values('102','Lion');
insert into master values('201','Fairy')
commits;

它可以显示保护器表和主表。但是它不能显示球员表。

代码语言:javascript
复制
drop table protector;
drop table master;
drop table player;

CREATE TABLE player (
    playno           NUMBER(2) NOT NULL,
    playname         VARCHAR2(30) NOT NULL,
    protectmedalno   CHAR(10) NOT NULL,
    mastermedalno    CHAR(10)
);


ALTER TABLE player ADD CONSTRAINT play_pk PRIMARY KEY ( playno );

CREATE TABLE protector (
    protectmedalno   CHAR(3) NOT NULL,
    protectname      VARCHAR2(30) NOT NULL   
);


ALTER TABLE protector ADD CONSTRAINT protector_pk PRIMARY KEY ( protectmedalno );

CREATE TABLE master (
    mastermedalno   CHAR(3) NOT NULL,
    mastername      VARCHAR2(30) NOT NULL   
);

ALTER TABLE master ADD CONSTRAINT master_pk PRIMARY KEY ( mastermedalno );


ALTER TABLE player
    ADD CONSTRAINT player_protector_fk FOREIGN KEY ( protectmedalno )
        REFERENCES protector ( protectmedalno );

ALTER TABLE player
    ADD CONSTRAINT player_master_fk FOREIGN KEY ( mastermedalno )
        REFERENCES master ( mastermedalno );
EN

回答 6

Stack Overflow用户

发布于 2018-05-15 21:11:45

您插入的顺序不正确:您必须先插入主程序和保护器,以便在插入播放器时可以引用它们:

代码语言:javascript
复制
insert into protector values('101','Dragon');
insert into protector values('102','Lion');
insert into master values('201','Fairy');

insert into player values('01','Joe','101',NULL);
insert into player values('02','Elsa','102','201');

编辑:'‘不是NULL,它是一个空字符串。要插入null,请使用显式的NULL jeyword。

票数 1
EN

Stack Overflow用户

发布于 2018-05-15 21:13:10

由于protectormaster是主表,因此您应该首先填充其中的记录。然后,插入到player中并引用这些记录:

代码语言:javascript
复制
insert into protector values('101','Dragon');
insert into protector values('102','Lion');
insert into master values('201','Fairy');

insert into player values('01','Joe','101','201');   -- refer to master
insert into player values('02','Elsa','102','201');  -- refer to master

请注意,我对player表中的插入进行了编辑,以便两条记录都引用master表中实际存在的记录。

票数 1
EN

Stack Overflow用户

发布于 2018-05-15 21:15:26

你必须先插入protector和master,然后再插入player,因为player引用master和protector,值必须在里面。

在删除时执行其他舍入操作...

代码语言:javascript
复制
insert into protector values('101','Dragon');
insert into protector values('102','Lion');

insert into master values('201','Fairy');

insert into player values('01','Joe','101','');
insert into player values('02','Elsa','102','201');

如果先从播放器中删除,然后从protector和master中删除。

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

https://stackoverflow.com/questions/50351064

复制
相关文章

相似问题

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