删除SQL表数据时存在约束的解决方法

这几天在做项目时,清除库中的数据,但是各表之间都存在约束关系,无法使用 ‘ truncate table 表名 ’语句进行操作,通过查询资料,找到了解决方法,当表之间存在约束关联时,想要执行truncate删除语句,就要先将约束禁用掉,删除后在恢复约束,就可以操作了。具体方法如下:

(1)查询要删除表存在哪些约束的SQL

select constraint_name, constraint_type, status from user_constraints where table_name='要删除的表名';

select constraint_name, constraint_type, status from user_constraints where table_name='PRJ_PROJECT';

(2)禁止外键约束的SQL

   方式一:
       alter table '表名' disable constraint '约束名称'

       alter table PRJ_PROJECT disable constraint SYS_C0018174;

   方式二:

      alter table '表名' modify constraint '约束名称' disable cascade;

      alter table PRJ_PROJECT modify constraint PK_PRJ_PROJECT disable cascade;

(3)执行truncate 语句删除数据

       truncate table '表名'

       truncate table PRJ_PROJECT;

(4)恢复外键约束的SQL

   方式一:

       alter table '要恢复的表名' enable constraint '约束名称';

       alter table PRJ_PROJECT enable constraint SYS_C0018174; 

   方式二:

       alter table '要恢复的表名' modify constraint '约束名称' enable;

       alter table PRJ_PROJECT modify constraint PK_PRJ_PROJECT enable;


对创建及删除一些表、字段、列及范围的约束的相关操作进行了总结整理,具体如下:

创建与删除SQL约束或字段约束

1)禁止所有表约束的SQL
select 'alter table ' + name + ' nocheck constraint all' from sysobjects where type='U'

2)删除所有表数据的SQL
select 'truncate table ' + name from sysobjects where type='U'

3)恢复所有表约束的SQL
select 'alter table ' + name + ' check constraint all' from sysobjects where type='U'

4)删除某字段的约束
declare @name varchar(100)
--DF为约束名称前缀
select @name=b.name from syscolumns a,sysobjects b where a.id=object_id('表名') and b.id=a.cdefault and a.name='字段名' and b.name like 'DF%'
--删除约束
alter table 表名 drop constraint @name
--为字段添加新默认值和约束
ALTER TABLE 表名 ADD CONSTRAINT @name  DEFAULT (0) FOR [字段名]

--删除约束
ALTER TABLE tablename Drop CONSTRAINT 约束名
--修改表中已经存在的列的属性(不包括约束,但可以为主键或递增或唯一)
ALTER TABLE tablename 
alter column 列名 int not null
--添加列的约束
ALTER TABLE tablename
ADD CONSTRAINT DF_tablename_列名 DEFAULT(0) FOR 列名
--添加范围约束
alter table  tablename  add  check(性别 in ('M','F'))

  • 3
    点赞
  • 36
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

dreaming317

你的鼓励将是我创作的最大动力!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值