oracle唯一索引,验证规则

AlwaysUnfading 2014-12-01 01:01:02
oracle唯一索引,预提交时就进行唯一验证了。如果是批量修改会有问题。如何设置在commit之后再进行验证。
如字段 a 有2条数据,1和2.我将1改成2,2改成3,业务上是允许的。预提交1改成2是 就违背唯一索引了。能否在commit
后进行 唯一检查?
...全文
167 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
AlwaysUnfading 2014-12-01
  • 打赏
  • 举报
回复
只能通过程序来做了,谢谢大家。
bw555 2014-12-01
  • 打赏
  • 举报
回复
这个确实靠数据库的验证是没法实现的,实现过类似的需求,但是是在应用程序中实现的 1、数据读取到内存 2、内存中修改数据 3、验证数据 4、验证通过后提交到数据库
小灰狼W 2014-12-01
  • 打赏
  • 举报
回复
这个不行。从逻辑上来说,唯一约束映射的是一个或一组实体的对应关系 按你的例子,a有两条记录,1和2,建唯一约束,这1和2应该是类似ID的东西,理论上只会更新它们的属性,而不会更新它们的ID。如果要变成2和3,应该是删除1,新增3,这么一个操作 这个需求我很怀疑设计是否严谨。如果还是需要的话,唯一约束不能满足这个需求,你可以通过程序来判重
tracy敬 2014-12-01
  • 打赏
  • 举报
回复
只能倒着写了 update t set t.id =8 where id = 6; update t set t.id =6 where id = 3;---这个违反唯一性了。 commit; 先把没有违反唯一性的写在前面 违反唯一性的放在其后面。
AlwaysUnfading 2014-12-01
  • 打赏
  • 举报
回复
唯一索引:

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;

--之后执行
update t set t.id =6 where id = 3;---这个违反唯一性了。
update t set t.id =8 where id = 6;
commit;

能否在commit;时才进行校验。

tracy敬 2014-12-01
  • 打赏
  • 举报
回复

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是支持的

3,490

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 高级技术相关讨论专区
社区管理员
  • 高级技术社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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