简简单单说外键和级联(2)

来源:未知 责任编辑:责任编辑 发表时间:2014-05-20 18:34 点击:
[sql]  
create table t_main  
(  
     id int primary key,  
     [content] varchar(100) not null  
      
)  
create table t_branch  
(    www.2cto.com  
    mainId int Primary key ,  
    [content] varchar(100) not null,  
    foreign key(mainId) references t_main(id)  
)  
        执行语句,现在我想直接在t_branch中插入一条数据insert into t_branch values(3,'分支表'),提示如下:INSERT 语句与 FOREIGN KEY 约束"FK__t_branch__mainId__4F7CD00D"冲突。该冲突发生于数据库"beidaqingniao",表"dbo.t_main", column 'id'。
       我想删除t_main语句drop table t_main,提示如下:无法删除对象 't_main',因为该对象正由一个 FOREIGN KEY 约束引用。
 
        在这两个表中,该外键的作用是,t_main中没有的外键值t_branch不能插入,而t_branch 正在引用t_main所以也不能只先删除t_main,否则t_branch中的数据会被孤立。我觉得,外键对主表的作用更倾向于不能删除,而对从表的作用更倾向于不能随便添加。
级联删除
       但是如果想级联删除怎么办?总结出三种办法。
       sql语句修改设置:因为默认的外键触发是“不执行任何操作”,所以我们可以使用sql语句更改设置:
[sql]  
FOREIGN KEY(id)REFERENCES tabley(id) on delete cascade on update cascade   
        意思是从表会跟随主表的改变而改变。
 
       可视化修改:不想写代码,也可以可视化操作,新建数据库关系图,选择主表和从表添加,其关系也会自动添加。选择主表或从表---右键---关系---insert和update规范---级联。如图:


 
        当然也可以使用触发器,触发器的基础知识,欢迎访问我的博客《详解sql中的触发器》http://www.2cto.com/database/201206/135523.html
[sql]  
-- =============================================  
-- Author:      李达    
-- Create date: 2012年6月10日 18:11:46  
-- Description: 简单的级联删除  
-- =============================================  
ALTER TRIGGER [dbo].[trigCascadeDelete]    --触发器名  
   ON  [dbo].[main]      ---作用于哪张表    www.2cto.com  
   instead of  delete    ---什么动作触发  
AS   
BEGIN  
    declare @id int   --声明@id变量  
    select @id=id from deleted --取出要删除的id  
    delete from branch where mainId =@id  --先删除从表中的数据行  
发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
用户名: 验证码:点击我更换图片
最新评论 更多>>

推荐热点

  • Request.ServerVariables 参数大全
  • 执行全文索引时出现权限不足的解决方法
  • 导入excel文件处理流程节点的解决方案
  • 查看sql修改痕迹(SQL Change Tracking on Table)
  • App数据层设计及云存储使用指南
  • PostgreSQL启动过程中的那些事三:加载GUC参数
  • MongoDB安装为Windows服务方法与注意事项
  • Percolator与分布式事务思考(二)
  • 写给MongoDB开发者的50条建议Tip1
网站首页 - 友情链接 - 网站地图 - TAG标签 - RSS订阅 - 内容搜索
Copyright © 2008-2015 计算机技术学习交流网. 版权所有

豫ICP备11007008号-1