说三道四技术文摘-感悟人生的经典句子
说三道四 > 文档快照

父子表的更新怎么办?

编辑:说三道四文库 发布时间:2017-12-12 04:45
HTML文档下载 WORD文档下载 PDF文档下载
我现在有两张父子关系的表,
A,B,B 是A 的子表,B 的 id 与 A 的 id 为外健关联关系,且都为主健。现在,A、B 表里面都有数据,如果修改任意一个主键都会出错,怎么办?对父子表关系难道就不能修改相关联的键值了吗?请高手赐教
alter table a drop cascade constraint
我感觉这样不行!删掉级联关系之后,那如果主表中的ID 改变,而子表中没有改变,那子表不就找不着父表了?如果有级联关系,就改不了了,怎么办呢?做一个触发器,我对sql 语法不是很熟,麻烦帮忙写一段代码参考参考!谢谢!
用新的主键值拷贝一份,并且删除原来的父子记录
可以多步完成,先在主表A中插入一笔新记录,其ID为新的ID,其他字段值与要修改的ID对应的记录相同,然后UPDATE表B,将其ID更改为新的ID,然后删除表A中要修改ID的那条记录。
但是在触发器里面没法实现 。在触发器里面不允许操作本表,怎么办?
我的意思是你不能直接update已经被子表使用的ID,必须经过多步完成,所以是不能指望触发器来完成这项工作的。
我的程序不用触发器很不好办。在网页中自动生成的sql,很不好改,所以只有在数据库上打主意。那用别的,存储过程,能行吗?
那你在before update 触发器中判断若:new.id与:old.id不同(或者你的触发器就是update of id),此时通过动态SQL,'alter table temp disable constraint temp_fk'将这个外键约束先disable,然后更新子表,在after update 触发器中再通过'alter table temp enable constraint temp_fk' 使这个外键约束enable.
关键是 'alter table temp disable constraint temp_fk' 这个动态sql能不能执行?因为在trigger里面,这个表示被锁定的。我对这个不熟,见笑!
我用 select * from user_constraints where TABLE_NAME='ARCHFLIST' 
--'ARCHFLIST'  就是我的子表,得出来的  FK_ARCHFLIS_REF_11545_ARCHF 就是这个外键约束,对吧!'alter table temp disable constraint FK_ARCHFLIS_REF_11545_ARCHF',是这样吗?多谢空杯大哥关照!
是这样的,你的触发器是建立在主表上的,而disable和enable的操作是针对子表的,不过我也不知这样的动态SQL语句是否能在trigger里执行?
若还是不行,你就在程序里,在update主表的ID前后直接执行这两句SQL语句吧!
不要用自然主键作为数据表的主键,最好建立一个代理键作为数据表的主键,并使用此代理键
进行关联,这样就不会出现修改主键的问题
我在主标上建了了一个trigger如下:

CREATE OR REPLACE TRIGGER ARCHF_TRIGGER1 
BEFORE  UPDATE  
ON XBDKMIS.ARCHF 
FOR EACH ROW  
  
DECLARE  
oldID  archf.docid%type;  
newID  archf.docid%type; 
BEGIN 
newID:=:new.docid; 
oldID:=:old.docid; 
if newID!=oldID then 
execute immediate 'alter table archflist disable constraint FK_ARCHFLIS_REF_11545_ARCHF'; 
execute immediate 'update table archflist set docid=newID where docid=odlID'; 
execute immediate 'alter table archflist enable constraint FK_ARCHFLIS_REF_11545_ARCHF'; 

end if; 
END; 


执行修改操作的时候,出现如下错误:

can't commit in trigger;
error during excute trigger;
...
好像没有什么好的解决办法。上面的办法也不行。可是这个表已经建立好了,这种效果看来在触发其中是不能达到的了。不止各位还有何高见?
我去年回答过一模一样的问题,解决方案如下:

-- 建父表
SQL> create table a(id integer primary key);
Table created.

-- 建子表
SQL> create table b(id integer);
Table created.

--建立一个deferrable(可延时检验的外键,并设置初始校验方式为延时)
--这一部大概是最关键的,所谓延时校验就是在commit的时候才对约束进行合法性检查
--而建立约束的时候如果不指定延时校验那就是及时校验,dml完成以后立即进行合法性检查
SQL> alter table b add constraint fk_b_a foreign key (id) references a(id) deferrable initially deferred;
Table altered.

--插入测试数据
SQL> insert into a values (1);
1 row created.
SQL> insert into a values (2);
1 row created.
SQL> insert into b values (1);
1 row created.
SQL> insert into b values (2);
1 row created.

--建立一个触发器保证父子表中的纪录同步
SQL> create or replace trigger tri_a_1 before update on a for each row
  2  begin
  3    update b set id=:new.id
  4     where b.id=:old.id;
  5  end;
  6  /

Trigger created.

--更新父表数据
SQL> update a set id=3 where id=1;
1 row updated.

--检查结果
SQL> select * from a;
        ID
----------
         3
         2

--结果是看到子表中的纪录自动被更新了
SQL> select * from b;
        ID
----------
         3
         2

不知道我有没有误解你的意思,下面是实验
CREATE OR REPLACE TRIGGER trg_update_father
AFTER UPDATE ON father FOR EACH ROW
BEGIN
     UPDATE child SET id=:new.id WHERE
     id=:old.id;
END trg_update_father;

^_^>select * from father
  2  ;

        ID
----------
         1
         2
         3

^_^>select * from child;

        ID
----------
SERIAL
----------------------------------------------------------------------------------------------------
         1
hello

         2
world

         3
goodbye


^_^>update father set id=4 where id=1;

已更新 1 行。

^_^>select * from father;

        ID
----------
         4
         2
         3

^_^>select * from child;

        ID
----------
SERIAL
----------------------------------------------------------------------------------------------------
         4
hello

         2
world

         3
goodbye
该问题已经解决。谢谢各位。议会揭贴!
图形的特殊显示效果-Delphi资料 图形整体拉出效果-Delphi资料 一个实用的Delphi屏幕拷贝程序的设计 用Delphi 显示122种图形特效 用Delphi编写DLL实现动态改变分辨率 用Delphi进行OpenGL编程学习心得 用Delphi开发windows95屏幕保护预览程序 用Delphi实现壁纸更换 用DELPHI实现位图显示特技 用DELPHI中Canvas特性开发图形软件 用构件变换法实现动画效果-Delphi资料 在Delphi中使用动态图标 在Delphi中显示Windows图标 在多媒体文件中批量抓取图象-Delphi资料 怎样读出不同格式图形的高和宽-Delphi资料 怎样使用PageUp、PageDown滚动窗体-Delphi资料 怎样制作全透明的窗口-Delphi资料 DELPHI:FormContainer简易手册 Delphi:用FormContainer渐变效果 Delphi4的窗口融合技术 Delphi使用技巧ABC Delphi使用技巧四则 DELPHI中自适应表单的实现 TList的用法-Delphi资料 不规则窗口的实现-Delphi资料 不用标题栏也移动窗体-Delphi资料 窗口建立和关闭时的特效-Delphi资料 窗口中状态行的显示-Delphi资料 动态提示的可视化实现-Delphi资料 动态修改显示器分辨率-Delphi资料 对数据库中的数据进行处理-Delphi资料 请教如何让DBGird的最后一行的结果为上面全部对应记录的和? 求助子段合并的查询语句 Struts Struts 请问没人解答的问题如何处理? 结帖还是删除? 请教 数据库中的表与自由表的转换? 求助,在IE中无法打开word文件!!!急!!!! 高手帮我!!! 在WINDOWS的标准TREEVIEW中点右键如何得到点击的坐标? 如何把oracle中的数据结构导入access中去? 请问odbc方式和OLEDB方式有什么区别? 100询问:修改boot.ini仍无法实现双重启动. websphere的问题(1)? 我是第一次使用域.为什么无法在域控制器里增加用户?help me! 求助:模板的连接问题 strust 请问:哪里有人民邮电出版社的《个体软件工程》下载 ?(有分送) 存储过程执行出错,请帮忙看看!急! 请问:在sybase中的设备大小的设定,有没有一个标准?? include问题,屡试屡败 请问怎么才能用最简单的方法把程序做成服务? 程序设计文档怎么写啊?求教 不好意思,一个简单的问题 websphere的问题(2)? 请问如何实现模式窗口,就是当打开子窗口主窗口不能操作,除非关闭子窗口,如果有这样的网页也行 关于清华出版社出版的“微软.NET程序设计系列”之《ADO.NET程序设计》的问题,大家来讨论一下 如何用程序实现光驱的弹入弹出? 在线等了,各位帮忙了!! 我运行了一个网络管理软件出现乱码?而别的程序都没有乱码? 对话框上面显示视图,怎么办? 一道四级题有一点不明白的地方,谢谢各位高手帮我解决一下困惑。。 websphere的问题? 在一个对话框CDialog类中访问窗体视图类CFormView中的函数发生错误? 有关简繁体转换的问题 怎么分离这个字符串 aa|bb|cc|dd| ASP连接Oracle9i的连接字符串是什么? 请教:EXCEL中使用VB进行串口编 websphere的问题(4)? 如何在自己写的类的属性、方法在被使用的时候显示一些相关信息? 高分:大侠们,帮我看一下这个设计思路对吗?(在线等待!) 初级问题:请问用ASP开发BS结构程序,应该选什么工具啊 请教各位pb的可执行程序的分发 我运行了一个网络管理软件时 这个软件显示的信息是乱码?而别的程序都没有乱码? 多谢awpking ,请进给你洒分. asp里调ActiveX控件,客户端却不能用,请帮助解决,100分相送。 如何让两个网段的电脑互相访问 在线等!打开文档的问题! HtmlHelp用法问题。急急!!1 只有在这问,关于笔记本网卡的驱动程序 我运行了一个网络管理软件时 这个软件显示的信息是乱码?而别的程序都没有乱码? 菜鸟的问题,大虾解决 如何用对立统一的辩证法让我们具有对手意识 有大小两圆的一部分重叠在一起,小圆不重叠部分与重叠部分的面积比是3:2,大圆不重叠部分与重叠部分面积的比是5:1,求大小圆面积的比 辩证法的基本原则是()1.永恒发展原则2.质量互变3.对立统一4.普遍联系的原则 做PPT想将几张图片同时插入一张幻灯片中,叠放在一起.需要它逐一出现,将前一张掩盖,然后再逐一消失 不分你我的反义词 《阿华田营养多合一》中的硫酸锌对人体有害吗? 请问这个字的 字音 字意 出处 冲阿华田的时候沉淀的东西是什么啊感觉像石灰一样 还有点白 感觉怪怪的 怎么回事 已知正方形纸片abcd的一条对角线ac的长4厘米.求它的边长和面积 宁字音,意思,意思,音,要全. 五岳归来不看山,黄山归来不看岳你能试着说说这句诗写出了什么吗 北京首发蓝色预警 35监测站点全部重南京财政局长被问收入:没够单独申报个北京首发空气重污染蓝色预警 29日空索马里“伊斯兰青年运动”高级指挥官被参议员贪污风波袭扰加拿大 哈珀政府骑霍英东家族争产风波再掀波澜 大哥三弟英首相:媒体爆料美监听丑闻是“资敌”平等对话才能改善美伊关系华人血腥灭门案惊扰纽约 落魄凶手因嫉“金发女孩”父母否认卖女儿 因没钱放上海自贸区制度框架成型 将迎新一轮政惩罚资本难以终结不平等 评皮凯蒂著作美媒文章“日本回归”引发亚洲动荡新支线试飞右发反推曾被意外打开 5分美众议院通过5704亿美元国防预算 泰国便衣警察冒充记者 上街逮捕示威者上海探索“双负面清单”机制荷尔蒙激素药物有助于保护接受化疗女患英国唯美主义大师约翰·威廉姆·沃特豪“数我的钱” 男子赌输火大手拿菜刀狂暨大南校区一在建教学楼起火 幸无人员苏州软件人员月费率破两万 跻身一线三国惊凤帝释天经蛮荒纪元神兽金刚啸影魔痕脑控七海手记情缘聚魂炼济世过去式修真杨戬异界纵横记鉴湖风景区旅游大禹陵旅游八字桥旅游书圣故里旅游府山公园旅游飞来寺旅游奔子栏旅游西津渡历史文化街旅游板壁岩旅游大九湖旅游小龙潭旅游
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘