为什么这个序列增加2?

时间:2015-08-21 19:21:30

标签: sql oracle sequence database-sequence

我无法理解为什么这个序列会增加2。

序列中是否有任何错误增加1?我需要这个在表'food'中插入主键值。

.container{
    background:url(images/4.jpg);
    background-position:center;
    background-size:cover;
    height:100vh;
    width:100vw;    
    -webkit-transition: background 1000ms ease-in-out;
    -moz-transition: background 1000ms ease-in-out;
    -o-transition: background 1000ms ease-in-out;
    -ms-transition: background 1000ms ease-in-out;
    transition: background 1000ms ease-in-out;
}

.home-click{
    background-image:url(images/3.jpg);
    background-position:center;
    background-size:cover;
    -webkit-transition: background 1000ms ease-in-out;
    -moz-transition: background 1000ms ease-in-out;
    -o-transition: background 1000ms ease-in-out;
    -ms-transition: background 1000ms ease-in-out;
    transition: background 1000ms ease-in-out;
}

2 个答案:

答案 0 :(得分:4)

因为您正在INSERT语句中的每个行启动的触发器中访问序列,当然它会增加2

选择一个。
我会选择基于触发器的,因为您不必记住在每个可能执行的insert语句中指定序列。

在这种情况下,您必须明确列出要插入VALUES的列:

INSERT INTO food (f_name, category, price, amount)
VALUES ('ruchi', 'chanachur' , 8, 50);

答案 1 :(得分:3)

您有两种方法可以解决此问题。

  1. 将insert语句修改为:

    insert into food (f_name, category,price , amount)
    values ('ruchi', 'chanachur' , 8, 50);
    
  2. 或修改您的触发器如下:

    CREATE OR REPLACE TRIGGER insert_into_food
    BEFORE INSERT ON food
    FOR EACH ROW
    BEGIN
      if :new.food_id is null then 
        :new.food_id:= food_id_ai.nextval;
      end if;
    END;
    /