产生的业务场景是这样的:教研的同学配置试卷时,对一道大题下的小题同时进行了删除和新增操作,结果删除操作执行后,发现大题下没有小题,大题这个节点也就删除了,后续执行新增小题时,发现大题已经不存在,就会报错了。
数据库说明:存在上述报错是由于表结构设计的有主外键关系,然后小题依赖(父节点)大题的数据,表设计上小题的表的外键为大题的主键id。当大题的主键删除后,新增小题就会报:a foreign key constraint fails
总结:实现流程或者页面设计可以优化。当小题都删除时对应答题就不再显示,这样就能阻止新增的操作存在的可能。当然上述是发生在同一个操作,同一个线程,存在主外键的情况下才会发生。
先执行了删除大题
[2021-03-13 14:18:34.015] DEBUG [http-nio-8090-exec-2] BaseJdbcLogger.java:143 - ==> Preparing: delete from homework_outline_group where id = ?
[2021-03-13 14:18:34.016] DEBUG [http-nio-8090-exec-2] BaseJdbcLogger.java:143 - ==> Parameters: 7352(Integer)
[2021-03-13 14:18:34.033] DEBUG [http-nio-8090-exec-2] BaseJdbcLogger.java:143 - <== Updates: 1
接着执行新增小题数据
[2021-03-