菜鸟疑问: 关于修改check 约束

jwwt 2016-07-19 07:56:18
( 创建表t , 并字段id 使用check约束 : 取值1~100)
> create table t ( id int , constraint ck_t check(id between 10 and 100);
>表已创建;

(接续操作:扩大取值范围 5~200)
> alter table t add constraint ck_t1 check(id between 5 and 200);
>表已更改;

( 接续操作:缩小范围 20~80)
>alter table t add constraint ck_t2 check(id between 20 and 80);
>表已更改;

(接续操作:再次扩大范围200~300
> alter table t add constraint ck_t3 check(id between 200 and 300);
>ORA-022293,无法验证SCOTT-CK_T3,违反检查约束条件

这里,
问题1 :最后一个ck_t3 ,为什么没能生效, 上面我做了几个(溢出范围)扩大和缩小check范围的尝试,都没报错,
这次为什么报错?? 这里有范围的因素么? 如果有,以哪个范围为准?
问题2 :上面生成的 ck_t, ck_t1, ck_t2 这三个check约束是同时作用于id 列? 还是说,是覆盖替换的形式(比如t1 覆盖t ,
后面t2又覆盖了t1,是这样么?)


另外,
问题3 : 某列已存在check约束,怎么修改check约束(在不删除表和原有check约束的基础上)??
我尝试用: alter table t modify constraint ck_t check(id ......, 始终没能成功,
可不可以用modify 这种形式? 可以的话, 请帮举个示例。
...全文
125 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
jwwt 2016-07-20
  • 打赏
  • 举报
回复
谢谢各位的解答!!
jwwt 2016-07-20
  • 打赏
  • 举报
回复
引用 1 楼 wmxcn2000 的回复:
200-300这个,先用20-300过渡一下。
辛苦你一下,给讲的详细一下,明天有空时,帮详细解答一下上面的问题,麻烦你了~~!!!
jdsnhan 2016-07-20
  • 打赏
  • 举报
回复

SQL> create table t ( id int , constraint ck_t check(id between 10 and 100));
 
Table created
 
SQL> alter table t add constraint ck_t1 check(id between 5 and 200);
 
Table altered
 
SQL> alter table t add constraint ck_t2 check(id between 20 and 80);
 
Table altered
 
SQL> alter table t add constraint ck_t3 check(id between 200 and 300);
 
Table altered
 
SQL> insert into t values(201);
 
insert into t values(201)
 
ORA-02290: 违反检查约束条件 (OA20.CK_T2)
 
SQL> insert into t values(43);
 
insert into t values(43)
 
ORA-02290: 违反检查约束条件 (OA20.CK_T3)
 
SQL> insert into t values(255);
 
insert into t values(255)
 
ORA-02290: 违反检查约束条件 (OA20.CK_T2)
 
SQL> 
1、我创建约束是没有问题的。oracle文档里没有明确说明约束是有个数限制的。 2、多次测试结果,约束同时生效,执行顺序是由下及上。即最后一个约束先做检查,然后是后数第二个,以此类推 3、删了重建吧。
流浪川 2016-07-20
  • 打赏
  • 举报
回复

Connected to Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 
Connected as basp


SQL> 
SQL> create table t ( id int , constraint ck_t check(id between 10 and 100));

Table created

SQL> alter table t add constraint ck_t1 check(id between 5 and 200);

Table altered

SQL> alter table t add constraint ck_t2 check(id between 20 and 80);

Table altered

SQL> alter table t add constraint ck_t3 check(id between 200 and 300);

Table altered

SQL> 
11G下没问题哦~~
卖水果的net 2016-07-20
  • 打赏
  • 举报
回复
某列已存在check约束,怎么修改check约束(在不删除表和原有check约束的基础上)?? 要删除,再重建;
卖水果的net 2016-07-19
  • 打赏
  • 举报
回复
200-300这个,先用20-300过渡一下。

17,377

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 基础和管理
社区管理员
  • 基础和管理社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧