a表 uid(pk), uname, age, ...
b表 sid(pk), uid, pic...
c表 tid(pk), uid, mess..Q1: 在b,c表建立了对a 表uid的外键约束是否就等同于创建了三个表格之间的级联更新关系
Q2: 修改a表的某一条记录的uid的值, 是否数据库会依据约束关系,同时级联更新b,c表中uid的值,而不需要手动修改?
Q3: b,c表单独修改,是否会提示约束而报错

解决方案 »

  1.   

    Q1: 在b,c表建立了对a 表uid的外键约束是否就等同于创建了三个表格之间的级联更新关系
    级联更新是可选的,在企业管理器操作必须选中级联更新才设置级联更新,用sql语句必须加ON UPDATE CASCADE 才设置级联更新Q2: 修改a表的某一条记录的uid的值, 是否数据库会依据约束关系,同时级联更新b,c表中uid的值,而不需要手动修改?
    如果设置了级联更新,应该是自动修改Q3: b,c表单独修改,是否会提示约束而报错
    单独修改主要看你修改后的值,如果改后的值在a表有记录,也不报错
      

  2.   

    级联更新也就是主表的更新、删除等都会对外表产生相应的更新、删除级联更新相关数据字段
    在外键定义的时候加 ON UPDATE  CASCADE 指定如果试图更新某行中的键值,而该行的键值由其它表的现有行中的外键所引用,则所有外键值也将更新成为该键指定的新值。如果在目标表上也定义了级联引用操作,则对在那些表中更新的键值同样采取指定的级联操作。例:create table dep(   --部门表
    id int not null CONSTRAINT PK_dep_id PRIMARY KEY NONCLUSTERED,
    name varchar(50)
    )
    gocreate table employee(   --员工表
    id int not null CONSTRAINT PK_emp_id PRIMARY KEY NONCLUSTERED,
    name varchar(50),
    depid int not null,
    CONSTRAINT FK_employee_dep FOREIGN KEY (depid)
       REFERENCES dep (id) ON UPDATE  CASCADE
    )
    goinsert dep select 2,'销售部'
    union all  select 3,'人事部'
    goinsert employee select 1,'张三',2
    union all  select 2,'李四',3goupdate employee set depid=1 where id=3
    select * from dep 
    select * from employee
    --看看以上语句出不出错,结果怎样,去掉 ON UPDATE  CASCADE,再看看级联删除相关数据记录在外键定义的时候加 ON DELETE  CASCADE 指定如果试图删除某行,而该行含有由其它表的现有行中的外键所引用的键,则也将删除所有包含那些外键的行。如果在目标表上也定义了级联引用操作,则对从那些表中删除的行同样采取指定的级联操作。
      

  3.   

    但是我写
    add constraint 外键 
    后缀的不支持on cascade老是提示错误