Oracle里有unique约束,意思是该字段唯一。
但如果是两个字段呢?
比如说一个会员等级表
ID NAME POINT DISCOUNT PRIVILEGE MID ---------- -------------------- ---------- ---------- ------------------------------ ---------- 1019 普通会员 0 10 无 1001 1015 青铜会员 500 9.8 0 1001 1016 白银会员 1200 9.5 0 1001 1017 黄金会员 2100 9.1 无 1001
mid代表商家的编号,不唯一,point代表消费额或者积分要求,也不唯一。
现在需要实现mid = 1001的商家已经有一个point = 500 的值后,无法插入 mid = 1001 且point = 500。
关于这个我只想到触发器,插入前进行查询,如果存在,则抛出异常。
create or replace trigger level_tri
before
insert on clothingsales_level
for each row
declare
num varchar2(20);--定义一个变量,用于记录是否已存在相同的数据
begin
select count(*) into num from clothingsales_level where mid = :new.mid and point =:new.point;--统计相同数据行数,将行数插入num变量中。
if num>=1 then
raise_application_error('-20002', '该积分等级已存在');--如果存在相同的数据,则抛出异常。
end if;
end;
/
内容来源于网络如有侵权请私信删除
文章来源: 博客园
- 还没有人评论,欢迎说说您的想法!