Oracle通过序列+触发器实现主键自增
接触oracle没多久,在建表的时候发现还不会如何设置主键自动增长。和mysql的设置为AUTO_INCREMENT属性相比,要复杂很多,所以现在记录起来。
我使用的是序列+触发器的方式。
现在已经创建好一个tbl_dept表,比较简单就两个字段。建表语句如下:
-- Create table
create table TBL_DEPT
(
dept_id INTEGER not null,
dept_name VARCHAR2(255) not null
)
tablespace SYSTEM
pctfree 10
pctused 40
initrans 1
maxtrans 255
storage
(
initial 128K
next 1M
minextents 1
maxextents unlimited
);
-- Create/Recreate primary, unique and foreign key constraints
alter table TBL_DEPT
add constraint PK_DEPT primary key (DEPT_ID)
using index
tablespace USERS
pctfree 10
initrans 2
maxtrans 255
storage
(
initial 64K
next 1M
minextents 1
maxextents unlimited
);
表有了之后我们首先需要创建一个用来实现自动增长的序列:
create sequence sql_dept
minvalue 1 --最小值
nomaxvalue --不设置最大值
start with 1 --从1开始计数
increment by 1 --每次加1个
nocycle --一直累加,不循环
nocache; --不建缓冲区
最后我们只需要再把触发器设置好就行了:
create or replace trigger tg_dept
before insert on tbl_dept --tbl_dept:表名
for each row
declare
nextid number;
begin
IF :new.dept_id IS NULL or :new.dept_id=0 THEN --dept_id:列名
select sql_dept.nextval --sql_dept:序列
into nextid
from sys.dual;
:new.dept_id:=nextid;
end if;
end tg_dept;
插入前:

我们现在通过插入语句来测试一下吧,我们插入的语句中主键dept_id为空:
insert into tbl_dept(dept_name) values('人事部');
结果:

Oracle通过序列+触发器实现主键自增的更多相关文章
- Oracle - 使用序列+触发器实现主键自增长
Oracle中的自增,不如Sql server那般方便. --.创建序列 CREATE SEQUENCE "TABLE_NAME"."SQ_NAME" MINV ...
- Oracle创建触发器实现主键自增
CREATE OR REPLACE TRIGGER "trigger_empl" before insert on extjsTest1.t_empl for each row b ...
- oracle数据库创建表且主键自增
唠叨几句:几年前的知识忘却了,整理一下笔记,提供一下方便 1.创建数据库表 设置主键 create table users( userid number(10) primary key, /*主键,自 ...
- Oracle创建表(包含、主键自增)
注意:Oracle导出建表语句不会导出触发器及自增索引 第一步:创建一张表 create table member( memberId number primary key, --主键.自增长 mem ...
- oracle建表 和 设置主键自增
1.新建table CREATE TABLE ysb_log( id ) primary key not null , tbdate ) NULL, tb_time ) NOT NULL, tblog ...
- Oracle 创建表并设置主键自增
创建数据库 CREATE TABLE STUDENT(ID NUMBER PRIMARY KEY, NAME VARCHAR(200) NOT NULL, SEX VARCHAR(200), CREA ...
- oracle 触发器实现主键自增
drop table book; --创建表 create table book( bookId varchar2() primary key, name varchar2() ); --创建序列 c ...
- oracle利用触发器实现主键字段自增
我们都知道oracle主键自增利用的是序列sequence.我们先创建一个sequence: create sequence test_sequence start increment maxvalu ...
- oracle主键自增
oracle主键自增 1建立数据表 create table Test_Increase( userid number(10) primary key, /*主键,自动增加*/ ...
随机推荐
- !!代码:baidu地图
http://map.baidu.com/mobile/ 手机开发时,嵌入地图可以嵌入这个网址!! http://developer.baidu.com/map/lbs-cloud.htm 百度地图 ...
- 学习笔记:FIS3
http://fis.baidu.com/ FIS3官网 [配环境]: 1.先要安装node.js https://nodejs.org/en/ NODE.js官网(下载这个,下载后运行: http ...
- 《算法导论》——重复元素的随机化快排Optimization For RandomizedQuickSort
昨天讨论的随机化快排对有重复元素的数组会陷入无限循环.今天带来对其的优化,使其支持重复元素. 只需修改partition函数即可: int partition(int *numArray,int he ...
- python 如何把小数变成百分数格式
1. 数据样本 ,valid_rate,homework_rate,inter_rate,playback_rate,zhujiang_good_comment5_rate,fudao_good_co ...
- 微信调用itchat库 实现发消息
import itchat,timefrom itchat.content import * itchat.auto_login(enableCmdQR=-1)while True: for i in ...
- awk选取制定行数,条件判断等
awk '{if(NR%5==0){print}}' your_file 取出可以被5整除的数awk '{if(NR<=300){print}}' your_file 取出行数小于300的数据a ...
- 通过windows远程桌面连接CentOS系统
前提: CentOS安装桌面,如果无桌面,请执行 # yum -y groups install "GNOME Desktop" # startx 1 2 配置源 # yum in ...
- cdnbest独立主控配置自定义错误页面
注:自定义错误的域名最好配置ssl,不配碰到有使用ssl的域名,错误码显示就会有问题 (1)登陆管理后台点区域列表-->配置-->错误url 解析一个域名到你的cdn主控,然后输入这个ur ...
- EasyUI DataGrid设置列宽为百分比导致表头和内容错位的解决方法
在DataGrid中设置列宽为百分比一般是没有问题的 columns: [[{ title: '内容', field: '__EMPTY', width: '40%' }, { title: '隐患级 ...
- Html利用CSS布局技巧
单列布局水平居中 水平居中的页面布局中最为常见的一种布局形式,多出现于标题,以及内容区域的组织形式,下面介绍四种实现水平居中的方法(注:下面各个实例中实现的是child元素的对齐操作,child元素的 ...