oracle数据库中有建立主外键关系的两张表,主表和明细表,例如订单和订单明细
主表: OrderID 主键
其它字段略
明细表: OrderID:外键
其它字段图 现在要向表中插入数据,主表中1条,明细表中5条。
向明细表中插数据时,提示违反主外键约束,
在用事务处理 时 该怎么写 Sql 语句呢 ?
请教各位帮忙解决一下 !!!!
主表: OrderID 主键
其它字段略
明细表: OrderID:外键
其它字段图 现在要向表中插入数据,主表中1条,明细表中5条。
向明细表中插数据时,提示违反主外键约束,
在用事务处理 时 该怎么写 Sql 语句呢 ?
请教各位帮忙解决一下 !!!!
解决方案 »
- c# 如何監控網站某一頁是否有更新
- 计算题
- int.Parse 同 Convert.Toint32 两种转换方式,那种好
- 请问GridView1模板列的ImageButton1如何单击该ImageButton1得到该图片的预览图?
- 关于三层结构的问题!
- 关于文件流有问题
- .net如何判断浏览器的类别?
- 在线程上调用自己的方法,结果无法返回正确的结果
- c#适合开发什么类型的软件?
- 对net_lover 《NET中各种数据库连接大全》一文的补充
- 求个算法________________________________________________________
- 总是取不出gridview1.DataKey
事物:无碍乎就是你执行的语句 必须完全成功执行 提交,只要有一条无法执行将全部回滚。
那么你在主表插入的语句中加入select @@identity 获得最新自增长的ID
这iD就是明细表的外键了
如果你主表的ID是自动增长的话 我觉得不是一个很好的解决方法,毕竟自动增长在程序里面不好控制。
比方你 获取最大记录数+1 万一你有删除的数据呢,这样不准确。
采用 COUNT 的方法更不合适。
建议采用.NET 自带方法 GUID 生成主表的ID 然后用一个变量保存起来。
明细表插入数据的时候不就可以引用主表的ID 了 然后就循环SQL语句 呗。试下。
多谢提醒 这个读取解决了 oracle中的 是自增序列 sequence 读取当前的CURRVAL 值 是当前插入记录 的号。 不过该怎么保证与明细表中后插入相关联数据10条匹配一致呢 ?也就是在多线操作时 会不会是读取的这个号 可能就是别人刚刚插入的值了 该怎么处理多线是这样的问题呢 ?多线时 加锁处理该怎么实现呢?