DBMS 出现在 COMMIT 中间交易(新手问题)

DBMS appears to COMMIT mid transaction (Newbie question)

我正在使用如下关系图所示的数据库:

并使用以下 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 告诉我我正在尝试添加一个元组,其中包含引用的 table 中不存在的引用(错误代码:1452 . 无法添加或更新子行:外键约束失败)。我的第一个问题是,使用交易的全部意义不就是在交易完成之前没有约束 enforced/checked 吗? (在这种情况下,一切都应该就位,没有“空引用”)。我能够添加所有内容的唯一方法是每次按下执行按钮时都在一行中添加。第二个问题是:我应该先添加主键还是先添加主键?我认为“明显”的答案是我需要先添加 PK,但即使我安排了脚本中的所有行以便始终先添加 PK,我仍然收到错误代码:1452,这是我可以添加的唯一方法一切都是将脚本行一次一行地提供给 DBMS。 显然我对这应该如何工作的理解存在根本性的错误,我试图在此处和 Google 上多次查找但找不到答案。

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