zoukankan      html  css  js  c++  java
  • 数据库的外键支不支持空值?

    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.

  • 相关阅读:
    python--DAY7面向对象进阶
    python--socket实例
    Python---day5-各类模块的使用
    python--day4--迭代器、生成器
    Python--三元运算与lambda表达式
    python--函数式登录程序
    Python--变量作用域
    Python--函数
    Python----文件的IO操作
    swagger2文档的步骤
  • 原文地址:https://www.cnblogs.com/dunnice/p/640081.html
Copyright © 2011-2022 走看看