有时候对列设置约束的时候没有写约束名,导致删除约束时没有约束名可以写。
其实在设置约束的时候,系统会自动生成约束名称,只要查询user_cons_columns表就可以知道列的约束名称。
例如,给列check_test增加check约束但是不写约束名:
alter table member add check(check_test not like '%1%');
查询约束名:
select t.CONSTRAINT_NAME,t.COLUMN_NAME from user_cons_columns t;
查询结果:
CONSTRAINT_NAME COLUMN_NAME
------------------------------ ----------------------------------------------------
PK_MEMBER MEMBERID
SYS_C007016 MEMBERMAIL
SYS_C007017 MEMBERNAME
SYS_C007020 CHECK_TEST
从结果中,我们就可以知道check_test的约束名是SYS_C007020,这下就可以使用语句删除该约束了。
注:如果某个列有多个未命名约束,查询user_cons_columns表只能查到该列有多少个约束,无法得知约束名对应的是什么约束。
给约束命名是个好习惯。