正如您在代码中看到的那样。三个表都有自己主键。protectmedalno和mastermedalno是player表的外键。protectmedalno不能为空。masterdealno可以为空。我先丢弃表保护器,然后丢弃master,最后一个丢弃的玩家。
桌手与桌长之间的关系较弱。
插入protector和master的值是没有问题的。但是将值插入到表player中,将会发生:*原因:外键值没有匹配的主键值。*操作:删除外键或添加匹配的主键。
我认为这是一个有约束的问题。
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 );发布于 2018-05-15 21:11:45
您插入的顺序不正确:您必须先插入主程序和保护器,以便在插入播放器时可以引用它们:
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。
发布于 2018-05-15 21:13:10
由于protector和master是主表,因此您应该首先填充其中的记录。然后,插入到player中并引用这些记录:
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表中实际存在的记录。
发布于 2018-05-15 21:15:26
你必须先插入protector和master,然后再插入player,因为player引用master和protector,值必须在里面。
在删除时执行其他舍入操作...
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中删除。
https://stackoverflow.com/questions/50351064
复制相似问题