4

我不明白为什么这个序列增加了 2。

递增 1 的顺序是否有任何错误?我需要这个在表“食物”中插入主键值。

CREATE SEQUENCE food_id_ai START WITH 1 INCREMENT BY 1 CACHE 100;

create table food(
    food_id  integer,
    f_name   varchar(30) not null,
    category varchar(30) not null,
    price    number(4),
    amount   number(4)  
);

alter table food add constraint fpk primary key(food_id);

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

insert into food values(food_id_ai.nextval,'ruchi', 'chanachur' , 8, 50);
insert into food values(food_id_ai.nextval,'chips', 'chips' , 8, 50);
insert into food values(food_id_ai.nextval,'aeromatic', 'soap' , 8, 50);
insert into food values(food_id_ai.nextval,'handwash', 'toyletries', 8, 50);
insert into food values(food_id_ai.nextval,'tissue', 'toyletries' , 8, 50);
4

2 回答 2

4

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

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

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

INSERT INTO food (f_name, category, price, amount)
VALUES ('ruchi', 'chanachur' , 8, 50);
于 2015-08-21T19:27:06.780 回答
3

你有两个选择来纠正这个问题。

  1. 修改插入语句如下:

    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;
    /
    
于 2015-08-22T12:22:24.857 回答