首页 > 解决方案 > DBMS 似乎要提交中间事务(新手问题)

问题描述

我正在使用以下关系图中显示的 batabase:在此处输入图像描述

并使用以下 SQL 脚本,我正在尝试添加一本新书及其新作者以及新类型(此时没有评级)(我像大多数学生一样使用 MySQL):

use booksdb;
start transaction;
insert into genre values ('Educational');
insert into books values ('123456789', 'Databases Illuminated',null, '1990,01,01' );
insert into book_genre values('123456789','Educational');
insert into authors(firstName, familyName) values ('Catherine','Ricardo');
insert into writes values('123456789',LAST_INSERT_ID());
COMMIT;

我有两个问题:第一个是 DBMS 告诉我我正在尝试添加一个包含引用表中不存在的引用的元组(错误代码:1452。无法添加或更新子行:外键约束失败)。我的第一个问题是,使用事务的全部意义是不是在事务完成之前不会强制/检查任何约束?(在这种情况下,一切都应该在它的位置,没有“空引用”)。我能够添加所有内容的唯一方法是每次按下执行按钮时执行一行。第二个问题是:我应该先添加主键还是添加主键?我认为“明显”的答案是我需要先添加 PK,但即使我安排脚本中的所有行以便始终先添加 PK,我仍然收到错误代码:1452,我可以添加所有内容的唯一方法是一次将脚本行提供给 DBMS 一行。我对这应该如何工作的理解显然存在根本性的错误,我试图在这里和谷歌上多次查找,但找不到答案。

标签: mysqlsqldatabaserelational-database

解决方案


Alrghit,我发现我做错了。在关系图中,我将 book 和 book_genre 之间的关系建立为一对多的关系,其中多面是书籍,它应该是相反的。我试图翻转它,到目前为止我没有任何问题。


推荐阅读