【发布时间】:2023-03-10 01:40:01
【问题描述】:
正如您在代码中看到的那样。三张表都有自己的主键。 “protectmedalno”和“mastermedalno”是玩家表的外键。 protectedmedalno 不能为空。 masterdealno 可以为空。我先drop table protector,然后drop master,最后一个drop player。
赌桌玩家和赌桌主人之间的关系较弱。
插入protector和master的值是没有问题的。
但是将值插入到桌面播放器中,它会发生:
*原因:外键值没有匹配的主键值。
*操作:删除外键或添加匹配的主键。
我认为是约束的问题。
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;
它可以显示保护表和主表。 但它无法显示玩家表。
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 );
【问题讨论】:
-
尝试在
player之前插入protector和master值 -
还是出现同样的错误。
-
我认为这是因为您在
player表中的mastermedalno列中插入''并且它与任何内容都不匹配,请尝试在那里写null。