栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

在SQL中输入数据时处理循环引用

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

在SQL中输入数据时处理循环引用

问: 是否必须禁用约束才能进行插入?
答: 在Oracle中,否,如果外键约束为否,则为否

DEFERRABLE
(请参见下面的示例)

对于Oracle:

    SET约束所有延迟;    插入部门的值('foo','dummy');    INSERT INTO员工值('bar','foo');    UPDATE Departments SET EmployeeID ='bar'WHERe DepartmentID ='foo';    犯罪;

让我们解压一下:

  • (必须禁用自动提交)
  • 推迟执行外键约束
  • 在“部门”表中插入一行,并为FK列添加一个“虚拟”值
  • 在FY引用Department的行中插入Employee表
  • 用实际参考替换部门FK中的“虚拟”值
  • 重新启用约束条件

注意:禁用外键约束对所有会话都有效,DEFERRING约束在事务级别(如示例中)或在会话级别(

ALTER SESSION SETConSTRAINTS=DEFERRED;

Oracle至少十年以来一直允许将外键约束定义为DEFERRABLE。我将所有外键约束(当然)定义为立即可延迟。这样可以保持每个人都期望的默认行为,但是允许在不禁用外键的情况下进行操作。

参见AskTom:
http
:
//www.oracle.com/technology/oramag/oracle/03-nov/o63asktom.html

参见AskTom:http
://asktom.oracle.com/pls/asktom/f
?
p=100:11:0::::P11_QUESTION_ID:10954765239682

另请参见:http
:
//www.idevelopment.info/data/Oracle/DBA_tips/Database_Administration/DBA_12.shtml

[编辑]

答: 在Microsoft SQL
Server中,您不能像在Oracle中那样推迟外键约束。禁用和重新启用外键约束是一种方法,但是我对以下情况感到震惊:1)对性能的影响(当重新启用该约束时正在检查ENTIRE表的外键约束),2)如果(何时?)约束的重新启用失败。请注意,禁用约束将影响所有会话,因此,在禁用约束时,其他会话可能会插入和更新行,这将导致重新启用约束失败。

使用SQL Server,更好的方法是删除NOT NULL约束,并在插入/更新行时允许使用NULL作为临时占位符。

对于SQL Server:

    -(已从Departments.EmployeeID移除NOT NULL约束)    插入部门值('foo',NULL)    去    插入员工值(“ bar”,“ foo”)    去    更新Departments设置EmployeeID ='bar',其中DepartmentID ='foo'    去

[/编辑]



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/398490.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号