关闭数据库外键约束

关闭数据库外键约束当向数据库中插入数据的时候 如果有表之间的关系十分复杂 尤其是是存在各种外键关系 这是需要暂时关闭这种针对外键约束的检查 本文针对以下三种数据库进行了一个总结

本文的测试环境是:

  • MySQL 5.5.16
  • Microsoft SQL Server 2008 R2 (SP2)
  • Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 – 64bit Production

当向数据库中插入数据的时候,如果有表之间的关系十分复杂,尤其是是存在各种外键关系,这是需要暂时关闭这种针对外键约束的检查,本文针对以下三种数据库进行了一个总结,如下:

一、MySQL数据库

MySQL中数据库中的外键约束是通过变量foreign_key_checks作用的,这个变量管理的全局的外键约束,而没有针对每个表的外键约束进行单独管理

1. 查看变量外键约束

  • show variables like '%foreign_key_checks%'
  • select @@foreign_key_checks

2. 开启外键约束:

set foreign_key_checks = 1

3.关闭外键约束:

set foreign_key_checks = 0

二、SQL Server数据库

SQL Server数据库中针对外键约束进行了统一的管理,它的粒度已经到表的层次,而不像MySQL中的那样只能对全局进行设置。SQL Server中外键约束的管理是通过系统的存储过程来实现的,如下:

sp_helpconstraint [ @objname = ] 'table' [ , [ @nomsg = ] 'no_message' ]
  • @objname:约束信息所在的表名,类型为nvarchar(776),没有默认值;
  • @nomsg:要打印表名信息,几乎不用;

1. 查看约束信息

EXEC sp_helpconstraint 't_archetype_revision_file'

这里写图片描述

在存储过程中查询到的约束信息有:

  • Constraint_Type:列的约束类型,约束的类型有:
    • PRIMARY KEY
    • FOREIGN KEY
    • DEFAULT
    • CHECK


  • Constraint_Name:用户或者系统定义的约束名称;
  • Delete_action :针对外键约束,当外键删除时采取的操作,为No Action或者cascade;
  • Update_Action:针对外键约束,当外键更新时采取的操作,为No Action或者cascade;
  • Status_Enabled :针对外键约束和check约束,是否启用,当约束建立时默认是启用的;
  • Status_For_Replication :针对外键和check约束,当复制的时候是否强制执行;
  • Constraint_Keys :针对check和default约束显示的是表达式,针对其他约束显示的是列名;

2. 开启外键约束

通过Alter Table语句完成,示例如下:

Alter Table t_archetype_revision_file CHECK CONSTRAINT FK1jdbfqwxvcn37y16ofob43ywf

3. 关闭外键约束

Alter Table t_archetype_revision_file NOCHECK CONSTRAINT FK1jdbfqwxvcn37y16ofob43ywf

三、Oracle数据库

Oracle中的外键约束的管理与SQL Server中的类似,也是统一管理的,针对的也是表的层次。外键约束的统一管理是在数据字典表user_constraints中。

1.查看约束

SELECT * FROM user_constraints

在里面有很多的字段,这里我们只关注相关的几项:

  • CONSTRAINT_NAME:约束名称;
  • CONSTRAINT__TYPE:约束类型,包括:
    • R:外键约束;
    • U:唯一约束;
    • P:主键约束;
    • C:check约束;
    • O:用于视图,只读约束;
    • ……


  • TABLE_NAME:约束所在的表;
  • STATUS:使用状态,ENABLED标识启用,DISABLED标识禁用;

但是在这个视图中,没有约束对应的表的列,可以通过连接user_cons_columns来查询,如下:

SELECT * FROM user_constraints t1 left join user_cons_columns t2 on t1.CONSTRAINT_NAME = t2.CONSTRAINT_NAME where t1.CONSTRAINT_NAME = 'LOGMNR_SESSION_EVOLVE$_PK'

2. 开启外键约束

默认情况下,建立约束时开启该约束。

alter table table_name enable constraint constraint_name 

3. 关闭外键约束

alter table table_name disable constraint constraint_name
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/176800.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月26日 下午9:01
下一篇 2026年3月26日 下午9:01


相关推荐

  • DirectX修复工具下载(exagear模拟器数据包在哪里)

    DirectX修复工具通用数据包2019Q3版大小:135MB/7z格式压缩下载地址1:https://download.csdn.net/download/vbcom/11692840说明:本资源中包含DirectX修复工具数据包2019Q3版,适合已经有主程序而缺少数据包的用户使用。本数据包为通用数据包,适合各种版本的Direc…

    2022年4月13日
    468
  • Android ViewPager使用详解

    Android ViewPager使用详解这是谷歌官方给我们提供的一个兼容低版本安卓设备的软件包,里面包囊了只有在安卓3.0以上可以使用的api。而viewpager就是其中之一利用它,我们可以做很多事情,从最简单的导航,到页面菜单等等。那如何使用它呢,与LisstView类似,我们也需要一个适配器,他就是PagerAdapter。看一下api的图片, ViewPager的功能就是可以使视图滑动,就像Lanucher左右滑动那样。分三个步

    2022年5月23日
    33
  • PyCharm 代码调试教程

    PyCharm 代码调试教程目录一 图文教程 二 调试相关的快捷键调试的过程分为三步 第一步 在你想要调试的地方 打上断点 第二步 使用调试模式来运行这个 python 程序 第三步 使用各种手段开始代码调试 一 图文教程 1 首先第一步和第二步 我用下面这张图表示 2 点击上图中的小蜘蛛 开启调试模式后 在 PyCharm 下方会弹出一个选项卡 这个选项卡的按键非常多 包括变量查看窗口 调试控制窗口 线程控制窗口 程序控制窗口

    2026年3月27日
    2
  • 清除 挖矿脚本 攻击

    清除 挖矿脚本 攻击清除挖矿脚本攻击 1 查看系统进程 是否有异常 top 发现 CPU 占用率 200 判定服务器已经被植入木马 2 查看异常进程是哪一个程序造成的 ls al proc 14618 发现恶意程序 绿色的是可执行文件 etc lafy3 删除恶意程序 cd etcrm rflzfy4 发现过了一会 lzfy 恶意程序再次出现 怀疑是个定时任务查看定时任

    2026年3月18日
    2
  • HorizontalScrollView 仿真 tabLayout

    HorizontalScrollView 仿真 tabLayout别人微博的网址http://blog.csdn.net/u013835855/article/details/71159888目前滑动指示器最著名的是JakeWarton的ViewpagerIndicator,用别人的东西固然方便,但是也带来很多使用上的疑惑,这篇博客,我们使用HorizontalScrollView自己写一个viewPager指示器。这里首先说一下很多自己写的indi

    2022年7月26日
    16
  • libxml2 c教程_linux怎么用gcc编译

    libxml2 c教程_linux怎么用gcc编译我的开发环境是ubuntu18嵌入式的环境也是ubuntu,只需要执行下面的动作即可虚拟机上执行,设备上也执行apt-getinstalllibxml2apt-getinstalllibxml2-dev虚拟机上建立连接sudoln-s/usr/include/libxml2/libxml/usr/include/libxml开发的时候引入”x…

    2025年5月24日
    4

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号