当前位置: 代码迷 >> Oracle技术 >> oracle唯一索引,验证守则
  详细解决方案

oracle唯一索引,验证守则

热度:212   发布时间:2016-04-24 08:06:41.0
oracle唯一索引,验证规则
oracle唯一索引,预提交时就进行唯一验证了。如果是批量修改会有问题。如何设置在commit之后再进行验证。
如字段 a 有2条数据,1和2.我将1改成2,2改成3,业务上是允许的。预提交1改成2是 就违背唯一索引了。能否在commit
后进行 唯一检查?
------解决思路----------------------

create table t(
id number(11),
name varchar2(30)
);

create unique index id_text_t on T (id) tablespace data_model_log;

insert into t (ID, NAME)
values ('3', 'li');

insert into t (ID, NAME)
values ('6', 'zhang');

insert into t (ID, NAME)
values ('7', 'shao');

--批量修改
update t set t.id = id+1 where id >3
commit;


如果是批量用sql修改的话,oracle是支持的
------解决思路----------------------
只能倒着写了
update t set t.id =8 where id = 6;
update t set t.id =6 where id = 3;---这个违反唯一性了。
commit;
先把没有违反唯一性的写在前面
违反唯一性的放在其后面。
------解决思路----------------------
这个不行。从逻辑上来说,唯一约束映射的是一个或一组实体的对应关系
按你的例子,a有两条记录,1和2,建唯一约束,这1和2应该是类似ID的东西,理论上只会更新它们的属性,而不会更新它们的ID。如果要变成2和3,应该是删除1,新增3,这么一个操作
这个需求我很怀疑设计是否严谨。如果还是需要的话,唯一约束不能满足这个需求,你可以通过程序来判重
------解决思路----------------------
这个确实靠数据库的验证是没法实现的,实现过类似的需求,但是是在应用程序中实现的
1、数据读取到内存
2、内存中修改数据
3、验证数据
4、验证通过后提交到数据库
  相关解决方案