在MySQL表中添加项目

时间:2017-08-01 15:12:21

标签: mysql sql

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

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

1 个答案:

答案 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)
);

字段profprof表中的外键。 MySQL将要求该字段引用实际存在的教授。它不适用于您的最终插入。为了解决这个错误,你可以创建一个这样的教授,例如

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

你没有在你的问题中报告错误,这对我来说似乎不对。也许您没有提及它,或者您的错误报告可能因某种原因而被关闭。