删除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'))
總結
以上是生活随笔為你收集整理的删除SQL表数据时存在约束的解决方法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 2020 物联网架构成长之路-物联网架构
- 下一篇: html给背景图片加遮罩,科技常识:cs