Oracle实现主键自增的几种方式

数据库作为一个系统的核心,数据库设计的1NF就是一个表结构必须有唯一约束也就是主键,Oracle数据库本身没有自增机制,不像MySQL直接使用关键字AUTO_INCREMENT自动加一,所以需要我们去自己来实现,下面有几种实现的方式

一、序列化+触发器

第一步在表结构完整的情况下创建一个序列

CREATE SEQUENCE SEQ_NAME
    INCREMENT BY 1
    MINVALUE 1
    MAXVALUE 9999999999999999
    START WITH 1
    CACHE 20

第二部创建触发器

CREATE OR REPLACE TRIGGER TRIGGER_NEW
BEFORE INSERT ON TABLE_NAME
REFERENCING OLD AS "OLD" NEW AS "NEW" FOR EACH ROW
ENABLE WHEN (NEW.ID IS NULL)
BEGIN
    SELECT
        SEQ_NEW INTO : NEW.ID
    FROM
         DUAL
END

二、序列+显示调用

同样先创建触发器

CREATE SEQUENCE SEQ_NAME
    INCREMENT BY 1
    MINVALUE 1
    NOMAXVALUE
    START WITH 1
    NOCYCLE
    NOCACHE

下面显示调用

INSERT INTO TABLE_NAME VALUES(SEQ_NAME.NEXTVAL)

三、先指定主键值,查询此表最大值一次加一

INSERT INTO TABLE_NAME VALUES(SELECT MAX(ID)+1 ID FROM TABLE_NAME2)

当然第三种方式局限性很大,也可以在代码中操作不用SQL语句来累加,因为代码的执行速度要远比sql语句代码执行的速度快的多的多

注:

查看当前序列的值

SELECT SEQ_NAME.CURRVAL FROM DUAL

查看当前序列的下一个值

SELECT SEQ_NAME.NEXTVAL FROM DUAL

dual为Oracle里面虚拟的表,并不真实存在

原文地址:https://www.cnblogs.com/LiuFqiang/p/11826659.html

时间: 2024-10-29 03:01:24

Oracle实现主键自增的几种方式的相关文章

oracle实现主键自增

由于ORACLE设置主键是不会自动增加的,所以必须用 序列 和 触发器 来完成主键的递增 1.建立数据表 create table Test_Increase(           userid number(10) primary key,  /*建立主键*/           username varchar2(20)           ); 2.创建自动增长序列 CREATE SEQUENCE TestIncrease_Sequence INCREMENT BY 1 -- 每次加几个 

MyBatis+Oracle实现主键自增长的几种常用方式

一.使用selectKey标签 <insert id="addLoginLog" parameterType="map" > <selectKey keyProperty="id" resultType="int" order="BEFORE"> select nvl(max(id),0)+1 from ap_loginlog </selectKey> insert in

oracle 实现主键自增

-- 创建表 drop table test; create table test(id number(10), name varchar2(10)); -- 创建对列 drop sequence seq_id; create sequence seq_id minvalue 1 nomaxvalue start with 1 increment by 1 nocycle nocache; /* minvalue 1     最小值 nomaxvalue     不设置最大值(由机器决定),或根

oracle主键自增(1) 序列+触发器实现Oracle主键自增

序列+触发器实现Oracle主键自增 序列的语法格式为: CREATE SEQUENCE 序列名 [INCREMENT BY n] [START WITH n] [{MAXVALUE/MINVALUE n|NOMAXVALUE}] [{CYCLE|NOCYCLE}] [{CACHE n|NOCACHE}]; INCREMENT BY 用于定义序列的步长,如果省略,则默认为1,如果出现负值,则代表序列的值是按照此步长递减的. START WITH 定义Oracle序列的初始值(即产生的第一个值),

oracle 触发器实现主键自增

drop table book; --创建表 create table book( bookId varchar2(4) primary key, name varchar2(20) ); --创建序列 create sequence book_seq start with 1 increment by 1; --创建触发器 create or replace trigger book_trigger before insert on book for each row begin select

Oracle主键自增

1.创建table 1 CREATE TABLE demo6 2 ( 3 id INT NOT NULL, 4 key1 VARCHAR2(40) NULL, 5 key2 VARCHAR2(40) NULL 6 ); 2.设置主键 1 alter table demo6 add constraint demo6_pk primary key (id); 3.新建序列 1 create sequence demo6_id 2 minvalue 1 3 nomaxvalue 4 increment

hao947 : Mybatis resultMap配置插入和主键自增返回 : 好947

映射配置文件  好947  <!-- type:映射实体类的数据类型 id:resultMap的唯一标识 -->  <resultMap type="person" id="BaseResultMap">   <!-- column:库表的字段名 property:实体类里的属性名 -->   <id column="person_id" property="personId" /&g

使用powerdesigner建模时设置主键自增的问题

研究了一下,其实只要双击表,选择columns,再双击在你所要设为自增型的键上(比如你的id)或者右键选择Properties,弹出一个ColumnProperties 对话框,我们看到有标识 identify,勾选即可. Columns 的UI上有一个漏斗型 的图标 Customize columns and filters 点击以后选择你要的列,里面有:default 和identity 选中后,以后表格能只需要打勾就行了. 在CDM中是不能设置主键自增属性的,只有在PDM中才能设置. 因为

Oracle创建主键自增表

Oracle创建主键自增表 1.创建表 create table Test_Increase( userid number(10) NOT NULL primary key,  /*主键,自动增加*/ username varchar2(20) ); 2.创建自动增长序列 CREATE SEQUENCE TestIncrease_Sequence INCREMENT BY 1   -- 每次加几个 START WITH 1     -- 从1开始计数 NOMAXVALUE       -- 不设