Oracle里有unique约束,意思是该字段唯一。

  但如果是两个字段呢?

  比如说一个会员等级表

 

        ID NAME                      POINT   DISCOUNT PRIVILEGE                             MID
---------- -------------------- ---------- ---------- ------------------------------ ----------
      1019 普通会员                      0         101001
      1015 青铜会员                    500        9.8 0                                    1001
      1016 白银会员                   1200        9.5 0                                    1001
      1017 黄金会员                   2100        9.11001

 

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;
/

 

内容来源于网络如有侵权请私信删除

文章来源: 博客园

原文链接: https://www.cnblogs.com/wfkfytmy/p/16118631.html

你还没有登录,请先登录注册
  • 还没有人评论,欢迎说说您的想法!