首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >为什么这个序列增加2?

为什么这个序列增加2?
EN

Stack Overflow用户
提问于 2015-08-21 19:21:29
回答 2查看 2.2K关注 0票数 4

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

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

代码语言:javascript
运行
复制
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);
EN

回答 2

Stack Overflow用户

发布于 2015-08-21 19:27:06

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

选择一个。

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

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

代码语言:javascript
运行
复制
INSERT INTO food (f_name, category, price, amount)
VALUES ('ruchi', 'chanachur' , 8, 50);
票数 4
EN

Stack Overflow用户

发布于 2015-08-22 12:22:24

您有两个选项来纠正这个问题。

  1. 修改insert语句如下: 在食物中插入(f_name,类别,价格,数量)值('ruchi','chanachur‘,8,50);
  2. 或者修改触发器,如下所示: 在为每行插入食物之前创建或替换触发器insert_into_food,如果:new.food_id为null,则为:new.food_id:= food_id_ai.nextval;
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32147894

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档