`
suiyuan17
  • 浏览: 48328 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

id自增

阅读更多
一篇:
首先,你要有一张表!
CREATE TABLE example(
ID Number(4) NOT NULL PRIMARY KEY,
NAME VARCHAR(25),
PHONE VARCHAR(10),
ADDRESS VARCHAR(50));

然后,你需要一个自定义的sequence
CREATE SEQUENCE emp_sequence
INCREMENT BY 1 -- 每次加几个
START WITH 1 -- 从1开始计数
NOMAXVALUE -- 不设置最大值
NOCYCLE -- 一直累加,不循环
NOCACHE -- 不建缓冲区
以上代码完成了一个序列(sequence)的建立过程,名称为emp_sequence,范围是从1开始到无限大(无限大的程度是由你机器决定的),nocycle 是决定不循环,如果你设置了最大值那么你可以用cycle 会使seq到最大之后循环.对于nocache顺便说一下如果你给出了cache值那么系统将自动读取你的cache值大小个seq,这样在反复操作时会加快运行速度,但如果遭遇意外情况如当机了或Oracle死了,则下次取出的seq值将和上次的不连贯.(如果连不连贯无所谓建议用cache,因为时间就是金钱呀!跑题了!)

你只有了表和序列还不够,还需要一个触发器来执行它!代码如下:
CREATE TRIGGER "触发器名称" BEFORE
INSERT ON example FOR EACH ROW WHEN (new.id is null)
begin
select emp_sequence.nextval into: new.id from dual;
end;
打完收工!下面你就试试插入数据吧!

另一篇:

学oracle不久,在建表时发现这样一个问题,比如我现在创建一个表:student

create table STUDENT
(
ID NUMBER not null,
NAME VARCHAR2(20) default '男',
SEX VARCHAR2(4),
ADDRESS VARCHAR2(40),
MEMO VARCHAR2(60)
)

现在我想实现每插入一条数据,就让id自动增长1.在SQLSERVER中这个很好实现,但在oracle中我搞了半天,查了下资料发现要用到“序列(sequence)”,“触发器”的知识。

首先,创建一个序列:

create sequence STU
minvalue 1
maxvalue 999999999999
start with 21
increment by 1
cache 20;

然后,给表student创建一个触发器:

create or replace trigger stu_tr
before insert on student
for each row
declare
-- local variables here
begin
select stu.nextval into :new.id from dual;
end stu_tr;




*******************************************************************************************************************************

下面用一个例子来说明自增主键的创建:

1、建用户数据表
      drop table dectuser;
      create table dectuser(
           userid integer primary key, /*主键,自动增加*/
           name varchar2(20),
          sex varchar2(2)
           );

2、创建自动增长序列
      drop sequence dectuser_tb_seq;
      create sequence dectuser_tb_seq minvalue 1 maxvalue 99999999
               increment by 1
               start with 1;   /*步长为1*/
3、创建触发器
      create or replace trigger dectuser_tb_tri
          before insert on dectuser     /*触发条件:当向表dectuser执行插入操作时触发此触发器*/
           for each row                 /*对每一行都检测是否触发*/
           begin                        /*触发器开始*/
                 select dectuser_tb_seq.nextval into :new.userid from dual;   /*触发器主题内容,即触发后执行的动作,在此是取得序列dectuser_tb_seq的下一个值插入到表dectuser中的userid字段中*/
            end;
           /*退出sqlplus行编辑*/
4、提交
       commit;

       现在就完成了自增主键的设定,搞定!可以检测一下。
      insert into dectuser(name,sex) values ('wang','女');
****************************************************************************************************

总的来说,通过在insert操作之前,添加一个触发器,将序列的值放到了将要插入的数据的ID中。
所以,需要 建表->建序列->建触发器 这样一个过程。
我觉得有几个要注意的
一是主键类型为 INT型比较好。
二是触发器主题内容中,select...into 后面的冒号不能掉了。

分享到:
评论

相关推荐

    ID自增JAVA类方法

    ID自增的java类方法,不用数据库主键自增的可以考虑试试这个,自己定义方式

    java快速ID自增器

    "Java快速ID自增器"就是为了解决这个问题而设计的一种工具或解决方案。它旨在提供一个高性能、线程安全的方式来生成自增ID,尤其适用于那些需要频繁生成ID的场景,如数据库记录的主键生成。 首先,我们需要理解自增...

    oracle表的id自增sql

    oracle 数据库建表id自增的sql语句创建sequence的名称,S_out_gold这个为

    oracle中如何实现ID自增

    ### Oracle中实现ID自增的方法 #### 序列(Sequence)与触发器(Trigger)结合使用 在Oracle数据库中,实现ID自增的一种常见方法是通过结合使用序列(Sequence)和触发器(Trigger)。这种方法非常实用,特别是在...

    通过id自增做增量加载.rar

    标题“通过id自增做增量加载.rar”暗示了这个压缩包内容主要涉及如何使用Kettle基于自增ID进行增量数据加载。在大数据处理中,增量加载是一种有效的方法,尤其对于实时或近实时的数据更新,可以显著减少处理量,提高...

    Oracle数据库表序列ID自增生成器

    本篇将深入探讨Oracle数据库表序列ID自增生成器及其相关知识点。 首先,序列(Sequence)是Oracle数据库提供的一种机制,它能够按顺序生成唯一的数字,且这个过程是线程安全的。序列可以在不使用表的情况下单独创建...

    beego-self-increment代码.zip

    "beego-self-increment代码.zip"这个压缩包文件显然是关于如何在Beego框架中实现ID自增的示例代码。在Web应用中,自增ID通常用于唯一标识每条记录,例如数据库中的主键。 首先,我们来理解一下Go语言和Beego的基础...

    主表从表ID自增创建语句.sql

    Oracle主表从表ID自增创建语句

    Oracle插入数据时获取自增ID

    ### Oracle插入数据时获取自增ID 在Oracle数据库中,当需要实现类似其他数据库系统(如MySQL、SQL Server等)中的自动增长字段功能时,通常会采用序列(sequence)和触发器(trigger)来实现这一需求。下面将详细...

    常用数据库的自增字段创建方法汇总

    ### 常用数据库的自增字段创建方法汇总 在数据库设计中,自增字段(自动增长字段)是非常常见的一种需求。它主要用于为主键提供唯一且连续递增的标识符,便于记录数据条目的唯一性。不同的数据库系统支持不同的自增...

    Mysql join联表及id自增实例解析

    在SQL优化方面,理解JOIN的执行机制,合理利用索引,以及适当设计自增ID和主键,都是提升查询性能的关键。同时,要避免在WHERE子句中使用可能导致优化器误解LEFT JOIN意图的条件,以确保正确返回所有预期的记录。

    django models里数据表插入数据id自增操作

    在Django Models中,数据表的插入和ID自增操作是非常基础但重要的功能。让我们深入探讨如何在Django中实现这些操作。 首先,对于数据表的ID字段,Django提供了`AutoField`字段类型来自动处理自增ID。当你在Model中...

    Kettle根据ID增量更新.zip

    在这种情况下,ID通常作为一个主键或唯一标识符,它的自增特性可以作为判断数据是否已更新的依据。当ID值增加时,意味着有新的数据插入或现有数据被修改。 在Kettle中,实现增量更新的一般步骤如下: 1. **数据源...

    ruoyi-postgresql设置自增序列.sql

    ruoyi框架集成postgresql,对自增表设置序列

    mybatisGenerator:mybatis gererator 针对 Oracle 定制,实现分页,ID自增,返回ID等功能

    mybatis gererator 针对 Oracle 定制,实现分页,ID自增,返回ID等功能。 主要针对Oracle数据库定制,添加功能列表如下: 分页 自增 返回自增ID 添加分页功能 1 修改Mapping文件(文件位置:src\main\java\org\...

    SqlServer 在中获得自增ID的两种方式.txt

    SqlServer 在中获得自增ID的两种方式.存储过程或SQL语句中插入数据后,自动获取自增的ID

    Oracle中主键自增实例

    综上所述,Oracle虽然不像某些数据库那样提供直接的主键自增功能,但通过序列、触发器等工具,可以灵活地创建满足需求的自增主键。在设计数据库时,应考虑性能、并发控制和最佳实践,确保系统的稳定性和高效性。

    Java实现分布式雪花ID生成代码

    在大数据量的时候,会涉及分库分表,使用自增ID可能会导致ID重复,使用UUID是无序的,在创建主键索引的时候会频繁的修改索引树内的索引位置,让索引更新的效率很低等问题。...ID自增:存入数据库中,索引效率高。

    Go-beego框架自增id自写方法

    然而,在某些特定情况下,比如在批量插入数据时,可能需要获取每条数据自增后的ID。由于Beego ORM的默认行为并不直接支持这种需求,开发者需要自定义方法来实现这一功能。本文将详细讲解如何在Go和Beego框架中自写一...

Global site tag (gtag.js) - Google Analytics