查看、清除数据库中的外键约束

INSERT 语句与 FOREIGN KEY 约束"FK_comment_news"冲突。该冲突发生于数据库"newssystem",表"dbo.news", column 'id'。 语句已终止。 前言 话说这学习啊,真是一件有趣的事情,这是最近慢慢体会到的事情,现在逐渐的体会到了这其中的某些乐趣,这不今天在整牛腩的时候就遇见了下面这个问题见图 正文: 这是怎么会事儿呢?其实上面的文字已经给咱们提示了——就是在执行插入操作的时候 引发了FOREIGN KEY 约束"FK_Dno"冲突。说白了就是约束,比如B表存在一个字段b,有约束,引用于A表的主a,那么在向B 阅读详情
有需要把一个数据库从SQL2005 回迁到 SQL2000,数据迁移过程中遇到的是外键约束问题。

系统表[sysforeignkeys]记录了数据库的所有外键关系,查看数据库的外键约束可以通过此表获得,
例如:

use AdventureWorksDW

select const=object_name(constid)
      ,f_table=object_name(fkeyid)
      ,fcol=f.name
      ,r_table=object_name(rkeyid)
      ,rcol=r.name
      ,keyno
from sysforeignkeys left join syscolumns f on  f.id=fkeyid and f.colid=fkey
                    left join syscolumns r on  r.id=rkeyid and r.colid=rkey

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

顺手写了一个清除所有外键关系的存储过程:

create procedure DropDbFk
as

--备份
if object_id('__foreignkeys') is not null drop table  __foreignkeys

use AdventureWorksDW

select const=object_name(constid)
      ,f_table=object_name(fkeyid)
      ,fcol=f.name
      ,r_table=object_name(rkeyid)
      ,rcol=r.name
      ,keyno
into __foreignkeys
from sysforeignkeys left join syscolumns f on  f.id=fkeyid and f.colid=fkey
                    left join syscolumns r on  r.id=rkeyid and r.colid=rkey


--删除整个数据库内全部表的外键约束
declare @fk_table sysname
       ,@fk_const_name sysname
       ,@sql varchar(1000)
     
declare fkConstDelete cursor for
  select f_table,const from __foreignkeys order by const
 
open fkConstDelete
fetch next from fkConstDelete into @fk_table, @fk_const_name
 
while (@@fetch_status=0) begin
  select @sql = 'Alter table '+@fk_table+' drop constraint '+@fk_const_name
 
  if object_id(@fk_const_name) is not null  exec(@sql)
 
  fetch next from fkConstDelete into @fk_table,@fk_const_name
end

Close  fkConstDelete
Deallocate fkConstDelete
 
go 

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

其实数据从 SQL 2005 回迁到 SQL2000,要解决外键约束可以有更简便的方法,就是在脚本中先把外键约束那一段关了,
等数据迁移好后,再运行之前禁闭了的那段约束脚本。

呵呵,第一次在技术论坛写BLOG,不当的地方还请朋友们多多指正。

MySQL 数据库 增删查改、克隆、 等操作 如果表中有自增长字段,使用DELETE FROM 删除所有记录后,再次新添加的记录会从原来最大的记录 ID 后面继续自增写入记录。#为从表HOBBY_DETAIL 表添加,并将 HOBBY_DETAIL 表的 hobid 字段和 HOBBY 表的 hobid 字段建立关联。#自增长字段必须是主;#---------------命令解释--------------------------------的定义:如果同一个属性字段X 在表一中是主,而在表二中不是主,则字段X称为表二的 阅读详情

相关推荐

数据库下所有表的约束查询

用于查询某个数据库下所有表的约束情况,以便统一分析约束是否合理;主要查询出的,是否级联删除,级联更新,强制约束,强制复制约束始终状态。如想使用别的状态,请自行添加。下载的童鞋别下载错了。

INSERT 语句与 FOREIGN KEY 约束“FK__SC__CID__4316F928“冲突。该冲突发生于数据库“EDUC“,表“dbo.Course“, column ‘CID‘。语句已终止

INSERT 语句与 FOREIGN KEY 约束"FK__SC__CID__4316F928"冲突。该冲突发生于数据库"EDUC",表"dbo.Course", column 'CID'。语句已终止。 数据库表的创建与赋予数据

m0_71976652的博客 4015

Context Capture10.20 安装教程(附安装包)

ContextCapture 是一款由Bentley公司推出的实景建模软件,可以快速为各种类型的基础设施项目生成最具挑战性的反应现实环境的三维模型。

一起来交流学习吧 2万+

INSERT 语句与 FOREIGN KEY 约束"XXX"冲突。该冲突发生于数据库"XXX",表"XXX", column 'XXX。...

做牛腩新闻发布系统的时候遇到了这样的问题:INSERT语句与FOREIGN KEY约束“KF_news_category”冲突。该冲突发生于数据库“newsystem”,表“dbo.category”,column‘id’。 运行程序添加不进去数据,就在SqlServer中直接添加数据,只能添加category表中的数据,news和comment表中无法插入数据,向...

weixin_30713953的博客 9346

代码报错:INSERT 语句与 FOREIGN KEY 约束“fk_classId“冲突。该冲突发生于数据库“school“,表“dbo.class_info“, column ‘id‘

代码报错:INSERT 语句与 FOREIGN KEY 约束"fk_classId"冲突。该冲突发生于数据库"school",表"dbo.class_info", column 'id'。-->【又是主关联问题】表student_info设置了表class_info的,代表要先创建class_info(此时就可以联系主)总结:设置了物理的表,要进行操作时,都应该让【关联表】“先”进行相应操作。解决方法:新增数据时,先新增【关联表】

2401_88077332的博客 564

INSERT 语句与 FOREIGN KEY 约束“FK_xxx_xxx“冲突

在进行数据库操作的时候,出现了这个问题,是因为约束所以报错的 其实我在做这个的时候就在想是否可以为空,在数据库表设计中可以看见已经设置了可以为空 一开始我以为这个报错是因为码无论如何也不能为空导致的,后来在网上查了一下发现并不是的 不管是强约束还是弱约束,为不为空都是看设计时是否允许为空 (参考:https://www.cnblogs.com/OpenCoder/p/11140645.html) 然后呢,我把插入语句中为空的列值改为 Null,就可以了 insert T_Environment(

weixin_39884521的博客 1万+

Mysql入门教学(数据库的管理)

目 录一、绪论二、数据库的基础操作1)查看数据库结构1、查看当前服务器中的数据库2、查看数据库中包含的表3、查看表的结构(字段)2)创建及删除数据库和表1.创建新的数据库2.创建新的表3.删除指定的数据表4.删除指定的数据库3)管理表中的数据记录1.向数据表中插入新的数据记录2.查询数据记录3.修改、更新数据表中的数据记录4.在数据表中删除指定的数据记录4)修改表名和表结构1.修改表名2.扩展表结构(增加字段)3.修改字段(列)名,添加唯一4.删除字段5)数据表高级操作(克隆表、清除表、创建临时表和创建

萧碧宰治的博客 437

mysql字段约束-索引-

1、字段修饰符(约束) 1.1、null和not null 修饰符 有not null修饰的字段不能插入null值,可以插入“空值”。 1、字段类型是not null,为什么可以插入空值? 空值是不占用空间的,null是占用空间的。比如,一个杯子,空值代表是真空的,null代表杯子中装满了空气,虽然看起来被试是空的,但是里面是有空气的。 2、为什么空值的效率比null高? null占用空间,所有mysql在进行比较的时候,null会参与字段比较,对效率有一部分影响 1.2、default设定字

qq_39658992的博客 1301

用于清除具有引用的表的 T-SQL 脚本

SQL Server 中,在清除中的数据时管理数据完整性可能是一项复杂的任务,尤其是在处理关系时。精心设计的方法对于维护数据库一致性和确保正确处理所有相关数据至关重要。本文提供了有关如何使用 T-SQL 脚本从 AdventureWorks2022 数据库清除表(包括具有引用的表)的深入指南。对于希望简化关系数据库中的数据清除操作的 SQL 开发人员、数据工程师和 DBA 来说,此脚本非常有价值。

技术探索驿站 1296

mysql约束 删除_mysql-具有约束的删除顺序,

我有一个包含三个表和“删除时”约束的架构,如下所示:| -> FK (cascade) -> |Organisation | | Users| - FK (cascade) Categories -> FK(restrict) -...

weixin_39945523的博客 384

设计数据库究竟使用不使用

因为需要设计表,也遇到了一些问题,比如其中一个问题,为了保持数据的一致性,究竟需要不需要设计呢? 知乎上也有根据这个问题的讨论: https://www.zhihu.com/question/19600081 不同的人看法也不同。 前辈有说过最好不要加,加有什么坏处呢? @ mysqlops: 回答下问题: 是否采用看业务应用场景,以及开发成本的,大致列下什么时候适合...

Kurapika47的博客 5451

【Laravel数据库升级必读】:约束在Laravel 10中的重大变更与应对策略

解决Laravel升级冲突难题,本文深入解析Laravel 10迁移的约束变更机制,涵盖索引长度、字符集调整与迁移策略优化。适用于MySQL与MariaDB场景,提供兼容性解决方案与最佳实践,提升数据库稳定性,值得收藏。

InstrIsle的博客 605

@JoinColumn nullable = false为何不生效?,彻底搞懂JPA约束的底层逻辑

彻底解析JPA的@JoinColumn nullable不生效原因,揭示约束的底层机制。涵盖实体映射场景、与DDL生成的关系及正确使用技巧,避免数据库约束失效问题。掌握核心原理,值得收藏。

PixelIsle的博客 794

迁移总是失败?,深度剖析Laravel 10中的约束异常与修复方案

解决Laravel 10迁移约束失败难题,深入解析常见异常原因及修复策略。涵盖MySQL配置、引擎兼容性、迁移顺序等关点,提供可复用的解决方案。适用于新项目搭建与旧系统升级,提升数据库稳定性,值得收藏。

ProceChat的博客 1039

MySQL数据库查看表所有

MySQL查看表所有,场景,客户需要清除测试数据,但是拥有操作权限的用户不能直接删除【操作日志表中有关联到用户表】,因此需要查询本表所对应的所有子表。select TABLE_NAME,COLUMN_NAME,CONSTRAINT_NAME, REFERENCED_TABLE_NAME,REFERENCED_COLUMN_NAME from INFORMATION_SCHEMA.KEY...

小谷的博客 3万+

MySQL数据库删除数据(有约束

在MySQL中删除一张表或一条数据的时候,出现有约束的问题,于是就去查了下方法:SELECT @@FOREIGN_KEY_CHECKS; 查询当前约束是否打开 SET FOREIGN_KEY_CHECKS=1; 设置为1的时候约束是打开的,设置为0的时候约束是关闭的;删除数据的时候如果想把id序列也清空到1开始可以: truncate table 表名;truncate tabl

小沐的博客 1万+

mysql关联表的数据删除

如果在data表中,原本有一条数据与user表中的user_id为1的数据存在关联关系,然后删除了user表中user_id为1的数据,并重新插入了一条user_id为1的数据,那么data表中的user_id为1的数据仍然可以通过查找到user表中的数据。如果data表原来和user_id为1的数据关联,然后我把user_id为1的数据给删了,但是我在建立约束后又插入了一条user_id为1的数据,那么我data表中的user_id为1的数据还可以通过查找到user表数据吗?

weixin_43730107的博客 1305

数据库或者父id关联数据删除的事儿

上面的图是三张相互关联的表,t_checkgroup表引用了t_checkgroup_checkitem表的checkgroup_id字段,t_checkitem表引用了t_checkgroup_checkitem表的checkitem_id字段.t_checkgroup_checkitem表也是我们常叫的中间表. 所以很明显就可以看出b表的那个小黄钥匙标志就是的标志,这里也可以通过查看b表...

实践是检验真理的唯一标准 609

Laravel 10迁移性能优化:如何在大型项目中高效管理约束

掌握Laravel 10迁移的约束优化技巧,提升大型项目数据库性能。适用于高表关联场景,通过延迟索引、分批操作与结构拆分减少执行时间。有效避免迁移卡顿,增强部署稳定性,值得收藏。

BytePerch的博客 936
下一篇: 如何在 SQL2005 导入 DBF 数据
tektite
博客等级 码龄19年 2粉丝 4原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值