今天做了个测试,搞清楚了级联更新,级联删除
级联删除:当我们没有对键加级联删除的时候,删除主键表中的数据(外键表有引用的数据)时,会报错,不能删除,必须先把相关联的外键数据
            删除了,才能删除主键表的数据,但如果新建外键的时候设置了级联删除,那么当我们删除主键表的数据时,数据库就会自动帮我们把相
            关联的外键表数据删除掉,这个好理解
级联更新:一直困扰我,级联更新有什么用,是更新什么东西呢,今天做了个测试(mssql),终于搞清楚了一点,我们修改主键表中和外键表进
            行关联的字段(一般是主键表的主键,mssql好像必须是主键),如果我们没有设置级联更新,那么这个时候会提示不能更新,因为外键表
            还有数据正在和这条数据进行关联,但是如果设置了级联更新,那么外键表的数据会自动帮我们更新
贴个例子(MS SQL):

 if     exists    ( select     *     from    dbo.sysobjects    where    id    =     object_id (N ' orders ' )    and     OBJECTPROPERTY (id,   N ' IsUserTable ' )    =     1 )   
      drop     table    orders
create   table  orders(
    id  int   identity   primary   key ,
    product  nvarchar ( 20 )  not   null ,
    customer_name  nvarchar ( 20 )  not   null
)


  if     exists    ( select     *     from    dbo.sysobjects    where    id    =     object_id (N ' customers ' )    and     OBJECTPROPERTY (id,   N ' IsUserTable ' )    =     1 )   
      drop     table    customers
create   table  customers(
    name  nvarchar ( 20 )  primary   key
)


alter   table  orders  add   constraint  fk_customerid  foreign   key  (customer_name)  references  customers(name)  on   delete   cascade   on   update   cascade  

insert   into  customers(name)  values ( ' sun ' )
insert   into  orders(product,customer_name)  values ( ' product a ' , ' sun ' )
insert   into  orders(product,customer_name)  values ( ' product b ' , ' sun ' )

select   *   from  customers
select   *   from  orders

update  customers  set  name = ' jun '   where  name = ' sun '

select   *   from  customers
select   *   from  orders


在sqlserver 2000下执行一下,结果如下:

SQL server 级联删除 sql以级联的方式删除表_数据库




之前我用一个自动增长的int id来作为关联字段,但是在执行update customers set id=111 where id=1的时候报错了,说不能修改主键值,后来改成字符串了,就通过了


级联的作用:


1,级联删除:比如我们的新闻有评论,新闻被删除了,那么评论自然也没用了,这个时候,就可以设置级联删除让数据库帮我们删除评论,这个用法用的比较常见,


                  当然不是 说 每个地方都适 合 用


2,级联更新:这个一下想不到哪里有很大用处,平常即使设置了,也没见哪里体现出来。


                  不过有一种情况个人觉得到是可以考虑,比如说有一个需求,用户注册时用户名要唯一,但是以后可以修改用户名(当然也要是唯一的),这个时候,


                  可以这样设计,用户表直接用用户名来作为主键存储,然后其他表使用用户名来进行外键关联,设置级联更新,这样可以实现需求,同样可以避免因为


                  要得到用户名(系统中很多地方需要得到用户名)而进行的关联查询,比如一个文章列表,只需要显示文章名称,作者名称,而我们直接在文章表里面有个


                  用户名字段和用户名进行了关联,这样就不用去和用户表进行关联查询了,当然,如果还需要用户的其它的信息的话,那还是得去关联查询的