1500字范文,内容丰富有趣,写作好帮手!
1500字范文 > 删除SQL表数据时存在约束的解决方法

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

时间:2018-09-19 21:42:51

相关推荐

删除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 '表名'disableconstraint '约束名称';

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 '要恢复的表名'enableconstraint '约束名称';

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'altertable'+ name +'nocheckconstraintall'fromsysobjectswheretype='U'

2)删除所有表数据的SQL

select'truncate table '+ namefromsysobjectswheretype='U'

3)恢复所有表约束的SQL

select'altertable'+ name +'checkconstraintall'fromsysobjectswheretype='U'

4)删除某字段的约束

declare@namevarchar(100)

--DF为约束名称前缀

select@name=b.namefromsyscolumnsa,sysobjectsbwherea.id=object_id('表名')andb.id=a.cdefaultanda.name='字段名'andb.namelike'DF%'

--删除约束

altertable表名dropconstraint@name

--为字段添加新默认值和约束

ALTERTABLE表名ADDCONSTRAINT@nameDEFAULT(0)FOR[字段名]

--删除约束

ALTERTABLEtablename DropCONSTRAINT约束名

--修改表中已经存在的列的属性(不包括约束,但可以为主键或递增或唯一)

ALTERTABLEtablename

altercolumn列名intnotnull

--添加列的约束

ALTERTABLEtablename

ADDCONSTRAINTDF_tablename_列名DEFAULT(0)FOR列名

--添加范围约束

altertabletablenameaddcheck(性别in('M','F'))

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。