我有一个自引用表,例如:
“ClassGroup”的表模式是:
Id String,主键
Name String,
ParentClassGroup String,外键(指的是这个表本身的“id”)
以下事务将按预期成功:
设置自动提交=0;
开始交易;
插入类组(x_id,x_name,x_parentclassgroup_x_id)值(“id1”,“cg1”,null);
插入类组(x_id,x_name,x_parentclassgroup_x_id)值(“id2”,“cg2”,“id1”);
插入类组(x_id,x_name,x_parentclassgroup_x_id)值(“id3”,“cg3”,null);
犯罪;
但以下事务将失败:
设置自动提交=0;
开始交易;
插入类组(x_id,x_name,x_parentclassgroup_x_id)值(“id2”,“cg2”,“id1”);
插入类组(x_id,x_name,x_parentclassgroup_x_id)值(“id1”,“cg1”,null);
插入类组(x_id,x_name,x_parentclassgroup_x_id)值(“id3”,“cg3”,null);
犯罪;
错误日志:
0 08:14:29 INSERT INTO CLASSGROUP(x_id, x_name, x_parentclassgroup_x_id,x_talend_timestamp) values("id2","cg2", "id1", 123) 错误代码:1452。无法添加或更新子行:外键约束失败(hier_master.classgroup,CONSTRAINT FKC0C64078BC2ACBF FOREIGN KEY (x_parentclassgroup_x_id) REFERENCES classgroup (x_id))
我的问题是:MySQL 服务器不够聪明,不知道第二次插入应该在第一次插入之前完成,因为“id2”的记录是指“id1”的记录?由于错误的插入顺序,预期会失败吗?Oracle 等其他数据库中的事务呢?
非常感谢您的见解和帮助!