我当时正准备使用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行。

任何帮助都是很好的。
祝你有个愉快的一周。

最佳答案

您的最终插入内容失败,因为它引用了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)
);


字段profprof表中的外键。 MySQL将要求该字段引用实际存在的教授。对于最终插入,情况并非如此。要解决此错误,您可以创建这样的教授,例如

insert into Prof values
(4, 'M');


您没有在问题中报告错误,对我来说似乎是错误的。也许您没有提到它,或者您的错误报告由于某种原因而被关闭。

09-16 18:19