• 数据库的外键支不支持空值?


    FOREIGN KEY 约束允许空值

    测试sql语句如下:

    现建立了一个临时数据库tempdb

     

    1: 先执行下列语句创建两个表:

     

    create table zhuhu

    (

    oid INT IDENTITY(1,1) PRIMARY KEY   NOT NULL,

    zhuhuname char(20), )

     

     

    create table yezhu

    (

    oid INT IDENTITY(1,1) PRIMARY KEY   NOT NULL,

    yezhuhao char(20),

    zhuhuhao int foreign key references  zhuhu, )

     

    2: 然后向两个表中各插入一行数据

    insert into zhuhu

    ( zhuhuname) values( 'duoduo')   // 添进去后, oid1.

     

    insert into yezhu

    (yezhuhao, zhuhuhao) values('haodongxi',1)

     

    3: 然后进行删除测试:

    delete from zhuhu

    where oid = 1

     

    报告删除出错, 出错信息如下:

    服务器: 消息 547,级别 16,状态 1,行 1

    DELETE 语句与 COLUMN REFERENCE 约束 'FK__yezhu__zhuhuhao__681373AD' 冲突。该冲突发生于数据库 'tempdb',表 'yezhu', column 'zhuhuhao'

    语句已终止。

     

    错误分析: 外键关联不允许级联删除, 如果在住户表中删除了oid1的行, 那么就违反了业主表中的参照这一行的外键约束. 所以删除失败.

     

     

    为了达到只删除被参照表的目的, 我们有进行了下面的测试,

    4: 在进行yezhu表中插入一个外键值为null的行:

    insert into yezhu

    (yezhuhao, zhuhuhao) values('haodongxi',null)

    执行成功, (因为这个表的外键字段允许为null)

     

    5: 执行下列更新语句:

    update yezhu

    set zhuhuhao  = null

    where zhuhuhao  =1

    将参考了待删除的行的外键参考置为null

     

    6: 删除:

    delete from zhuhu

    where oid = 1

     

    成功:

     

    其实这个检查是有问题的,

    数据库对存在外键参考的值的删除有三种处理方式, 1: 级联删除, 2:置空值 3: 不允许删除.

     sql server默认的外键参考关系有一个叫做强制外键约束的属性, 这个属性的默认值为true, 当强制外键约束的值为true, 是不允许空值的, 如果把这个值改为false, 那么就可以删除了, 删除后, sqlserver会自动把参考这个记录的所有字段都置为null.

  • 相关阅读:
    jquery获取浏览器URL参数
    jquery获取、设置、删除cookie
    jquery获取当前按钮、截取字符串、字符串拼接、动态循环添加元素
    Callback函数
    window.opener和window.open的使用
    JavaScript内置对象
    SeaJS:一个适用于 Web 浏览器端的模块加载器
    hihocoder 1388 &&2016 ACM/ICPC Asia Regional Beijing Online Periodic Signal
    Codeforces Round #373 (Div. 2)
    fzu 1759Super A^B mod C 指数循环节
  • 原文地址:https://www.cnblogs.com/dunnice/p/640081.html
Copyright © 2020-2023  润新知