我正准备使用PHPMyAdmin创建一个网站,我遇到了一个问题:我不明白我的代码为什么会做我不想要的事情。
这是创建表格和一些随机条目的代码:
create table stud (
matrnr int primary key,
pname Varchar(30) not null
);
create table prof (
persnr int primary key,
pname Varchar(50) not null
);
create table vorl (
vorlnr int primary key,
titel varchar(50),
prof int references prof(persnr) on delete set null
);
create table prüfen (
stud int references stud(matrnr) on delete cascade,
vorl int references vorl(vorlnr),
prof int references prof(persnr) on delete set null,
note float,
primary key(Stud, vorl)
);
insert into stud values
(1, 'G'),
(2, 'F'),
(3, 'C');
insert into Prof values
(1, 'M'),
(2, 'L'),
(3, 'M');
insert into vorl values
(1, 'Info1', 'M'),
(1, 'Info2', 'L'),
(1, 'Info3', 'M');
insert into prüfen values
(1, 1, 1, 2.0),
(1, 2, 1, 1.7),
(2, 3, 2, 2.3);
在这个位置我尝试了
Insert into prüfen values (3, 1, 4, 2.0);
但表prüfen
中只有3行。
任何帮助都是好的。 祝你有个愉快的一周。
答案 0 :(得分:0)
您的最终插入失败,因为它引用prof
ID为4的教授,prof
表中不存在。
如果仔细查看prüfen
表的定义,这将更加明确:
create table prüfen (
stud int references stud(matrnr) on delete cascade,
vorl int references vorl(vorlnr),
prof int references prof(persnr) on delete set null,
note float,
primary key(Stud, vorl)
);
字段prof
是prof
表中的外键。 MySQL将要求该字段引用实际存在的教授。它不适用于您的最终插入。为了解决这个错误,你可以创建一个这样的教授,例如
insert into Prof values
(4, 'M');
你没有在你的问题中报告错误,这对我来说似乎不对。也许您没有提及它,或者您的错误报告可能因某种原因而被关闭。