日期:2014-05-17  浏览次数:21164 次

同一个事务 报“未找到父项关键字” 急
如题问题. 描述如下:

有两张表 A, B. 其中A表为主表 B表为从表. A表中的一字段ID作为B表的外键. 

在同一事务中:

Transaction Start:

Insert Into A

Insert Into B (在此处就会报如题错误) 

Commit;

谢谢


------解决方案--------------------
就不能把“真正的代码及报错信息”贴出来么?有啥可保密的呢?囧的蛋疼!
------解决方案--------------------
那就看看B表的ID是否在A表中存在了,很好查原因。
------解决方案--------------------
insert into a的关联值必需与insert into b外键值相同
------解决方案--------------------
估计你的AB表有外键关联约束
要么去掉约束
要么先提交a 然后判断a是否有了 有了再插入b

------解决方案--------------------
那要看你的事务是在哪里写的了 如果是在程序里 A表不提交 往B中插记录肯定不行 他不认你是不是同一个事物
如果是在存储过程里 A不提交 B应该可以插入 这时候A和B应该共用同一个回滚段
程序里没有回滚段的概念 所以 不提交就是没有
个人理解
------解决方案--------------------
一般都对需要这种操作的表,都是采用延时约束来解决
出这种问题是因为约束在insert的时候检查,采用延时约束后会将约束延时到commit操作时候在检查
------解决方案--------------------
问题很简单。有约束。比如你是老大。你手底下有一个小弟。你们彼此有关系
如果别人想打你,必须先把你小弟打倒了才能打你。
如果上面我说的你还不懂的话。
Insert Into B这是你错误的原因是不?
是的话,那就是绝对有一个表和这个B有关系。只有你把这个和B有关系的表插入数据,才能对B插入数据
------解决方案--------------------
原因:违反了外键约束。
解决:执行insert into B语句时,提供的外键的值,必须已经存在于表A中。