免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1786 | 回复: 1
打印 上一主题 下一主题

一个有关用触发器来实现主键和外键列的级联更新的问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2004-01-15 16:43 |只看该作者 |倒序浏览
在ASE 12.5下,有两个表:titles和salesdetail,表结构如下:

CREATE TABLE titles
(
    title_id char(6)       NOT NULL,
    title    varchar(80)   NOT NULL,
    pub_id   char(4)       NULL
    CONSTRAINT p_titles_id
     primary key (title_id),

)

CREATE TABLE salesdetail
(
    title_id char(6)      NOT NULL,
    qty      smallint     NOT NULL,
    discount float        NOT NULL
CONSTRAINT f_salesdetai_title
    FOREIGN KEY (title_id)
    REFERENCES titles (title_id)
)

我想在更新titles表的主键列title_id时,级联更新外键表salesdetail的title_id列值

现在表titles上创建一个update 触发器
create trigger cascade_atrig
on titles
for update sa
  if update(title_id)
   begin
     update salesdetail
       set title_id=inserted.title_id
        from titles,deleted,inserted
        where deleted.title_id=salesdetail.title_id
   end
go

当更新titles表的title_id值时,
  update titles set title_id='ps8888' where title_id='pc8888'

返回如下错误:
Dependent foreign key constraint violation in a referential integrity
constraint. dbname =  'pubs3', table name = 'salesdetail', constraint name = 'f_salesdetai_title'.
Command has been aborted.

这是sybase的官方资料上提供的例子。


请教各位
(1) 这个触发器本身是否有问题?
(2) 如果不是触发器的问题,那么是否不能通过这种方式来级联更新?
(3) 有何种有效的方法可以来更新主键同时级联更新外键表值?

多谢
  

论坛徽章:
0
2 [报告]
发表于 2004-01-16 10:25 |只看该作者

一个有关用触发器来实现主键和外键列的级联更新的问题

primary key &foreign key的更新关系是foreign ->; primary!
建立关系是primary ->; foreign
如果要实现更新primary更新foreign那还不如直接用trigger实现,但用trigger实现primary key的约束不推荐
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP