前言:

  Oracle中不像SQL Server在创建表的时候使用identity(1001,1)来创建自动增长列,而是需要结合序列(Sequences)和触发器(Triggers)来实现

创建测试表

create table tbluser
(
ID NUMBER(10) not null,
NAME VARCHAR2(50) not null,
SEX VARCHAR2(2) not null,
AGE NUMBER NOT NULL,
DESCRIPTION VARCHAR2(1000),
PRIMARY KEY("ID")
)

创建一个序列,从10000开始计数,增量为1

create sequence USER_ID
minvalue 1
maxvalue 9999999999999999999999999999
start with 10000 --从10000开始生成序列
increment by 1 --增量为1
cache 20; --预存20个序列值在内存中,这样可以提高访问序列的速度

为user表创建一个before insert的触发器,在插入之前将表user的主键设置为上面的序列值

CREATE OR REPLACE TRIGGER "USER_ID_TRIGGER" BEFORE
INSERT ON tbluser FOR EACH ROW --一定要加上For each row,表示该触发器适应于每一条记录
declare
mid number;
begin
select user_id.nextval into mid from dual; --user_id.nextval是获得上面定义的序列ORDER_ID的下一个值
:new.id:=mid; --将得到的序列值赋给表user的主键id, 可以用":new"引用将要插入的一行数据

--SELECT USER_ID.Nextval INTO :new.ID FROM dual;
end;

这样,当执行插入记录的时候,可以这样写

insert into tbluser(name,sex,age,description)values('test','女',20,'');

Oracle会调用上面创建的触发器将序列值赋值给主键ID

第二种方案:

在建完序列后直接在插数据的时候在主键的地方直接使用user_id.nextval代替

Oracle创建自动增长列的更多相关文章

  1. Oracle数据库自动增长列的实现过程

    1.创建序列 -- Create sequence create sequence INNERID minvalue 1 maxvalue 99999999999999 start with 1 in ...

  2. oracle创建自增长列

    --创建一个新表 /*create table students(stu_id number,stu_name varchar2(20),stu_email varchar2(40),primary ...

  3. 使用sql语句创建修改SQL Server标识列(即自动增长列)

    一.标识列的定义以及特点SQL Server中的标识列又称标识符列,习惯上又叫自增列.该种列具有以下三种特点:1.列的数据类型为不带小数的数值类型2.在进行插入(Insert)操作时,该列的值是由系统 ...

  4. SQL Server 2012 自动增长列,值跳跃问题

    介绍 从 SQL Server 2012 版本开始, 当SQL Server 实例重启之后,表格的自动增长列的值会发生跳跃,而具体的跳跃值的大小是根据增长列的数据类型而定的.如果数据类型是 整型(in ...

  5. Hibernate注解映射sequence时出现无序增长问题+hibernate 映射 oracle ID自动增长:

    Hibernate注解映射sequence时出现无序增长问题+hibernate 映射 oracle ID自动增长: 通过Hibernate注解的方式映射oracel数据库的sequence主键生成器 ...

  6. SQL Server 2012 自动增长列,值跳跃问题(自增增加1000)

    介绍 从 SQL Server 2012 版本开始, 当SQL Server 实例重启之后,表格的自动增长列的值会发生跳跃,而具体的跳跃值的大小是根据增长列的数据类型而定的.如果数据类型是 整型(in ...

  7. SQLite Expert 删除表数据并重置自动增长列

    用下面的语句肯定是行不通的,语句不支持 truncate table t_Records 方法:1.删除表数据 2.重置自动增长列 where name='t_Records' /*name :是表名 ...

  8. SQL获取刚插入的记录的自动增长列ID的值

    假设表结构如下: CREATE TABLE TestTable ( id int identity, CreatedDate datetime ) SQL2005获得新增行的自动增长列的语句如下: i ...

  9. Sql 重置自动增长列

    Sql 重置自动增长列: dbcc checkident(表名, reseed, 0) 使用的情况,一般出现在主外键关联表,导致无法 truncate 只能delete的情况. 此时我们可能会需要重置 ...

随机推荐

  1. 删库吧,Bug浪——我们在同一家摸鱼的公司

    那些口口声声, Bug越来越难写人的,应该盯着你们: 像我一样,我盯着你们,满眼恨意. IT积攒了几十年的漏洞, 所有的死机.溢出.404和超时, 像是专门为你们准备的礼物. 圈复杂度.魔鬼变量.内存 ...

  2. 使用docker创建rabbitMQ容器

    1.拉去镜像 docker pull rabbitmq:3.7.7-management

  3. python文件处理-将图像根据坐标画矩形标记

    内容涉及:文件遍历,选取csv后缀文件,用cv操作图片 import csv import os import sys import numpy as np import copy import sh ...

  4. node实现文件属性批量修改(文件名)

    前言 书接上回,我们实现了批量修改文件的时间,但是却没有实现文件名称的批量修改,是因为我也说过,没有界面的话直接在命令行实现显得有点繁琐,所以我们就通过接口+界面的方式来实现我们这个小需求吧.所以,闲 ...

  5. 每日一题 - 剑指 Offer 43. 1~n整数中1出现的次数

    题目信息 时间: 2019-07-01 题目链接:Leetcode tag: 整除 取余 规律 递归 难易程度:中等 题目描述: 输入一个整数 n ,求1-n这n个整数的十进制表示中1出现的次数. 例 ...

  6. CSS3 transform详解,关于如何使用transform

    transform是css3的新特性之一.有了它可以box module变的更真实,这篇文章将全面介绍关于transform的使用. transform的作用 transform可以让元素应用 2D ...

  7. Lost connection to MYSQL server at 'reading for initial communication packet'

    这个异常,是我在对外开放了本地数据库端口后,测试能否连接上数据库时候出现的问题: 解决步骤: 1.services.msc打开服务窗口,重启mysql,进行重试,还不行: 2.对数据库进行操作 USE ...

  8. HDU 3686 Traffic Real Time Query System (图论)

    HDU 3686 Traffic Real Time Query System 题目大意 给一个N个点M条边的无向图,然后有Q个询问X,Y,问第X边到第Y边必需要经过的点有多少个. solution ...

  9. P2034 选择数字——线性dp(单调队列优化)

    选择数字 题目描述 给定一行 \(n\) 个非负整数 \(a[1]...a[n]\) .现在你可以选择其中若干个数,但不能有超过 \(k\) 个连续的数字被选择.你的任务是使得选出的数字的和最大. 输 ...

  10. sql语句-如何在SQL以一个表中的数据为条件据查询另一个表中的数据

    select *from 表2where 姓名 in (select 姓名from 表1where 条件) 这个就是用一个表的查询结果当作条件去查询另一个表的数据