Oracle数据库主键自增
Oracle数据库主键自增
在学习mysql时,我们很容易通过auto_increment就能实现主键自增的功能,但是在Oracle数据库中,是没有这个关键字的,所以也不能通过这样来实现主键自增。下面我就为大家介绍两种实现主键自增的方法。
两种方法的基础都有一个概念就是序列(sequence)的概念,一种是利用序列和显式调用的方式去实现主键自增,另一种是通过序列和触发器(trigger)来实现主键自增。
/*1.利用序列主键自增*/
- 第一步、创建表
--创建表,主键为ID
CREATE TABLE YFF (
ID INT primary key ,
NAME VARCHAR2(10)
);
--创建表的格式
CREATE TABLE 表名(
字段名 字段类型(可以加一些约束,例如主键约束),
字段名 字段类型
)
- 第二步、创建序列
--创建序列
create sequence seq_yff
start with 1
increment by 1;
--创建序列的格式
create sequence 序列名称
start with 开始数字
increment by 增长数字
minvalue 最小值
maxvalue 最大值
cycle 是否循环(cycle为循环,nocycle为不循环)
nocache 不使用缓存
- 关于序列的其他重要操作
--查询序列(利用nextval查询序列下一次的值)
select seq_yff.nextval from dual;
--查询序列的格式
Select 序列名.nextval from dual
(dual为伪表,当我们不需要从具体的表来取得表中数据,而是单纯地
得到一些我们想得到的信息,就可以使用伪表)
注意:这里第一次执行这条查询语句得到结果为1,再执行得到2,第一种实现主键自增的方法就是使用序列名.nextval使得值一直增加的
--删除序列()
DROP SEQUENCE seq_yff;
注意:序列和表不是连接在一起的,当序列创建之后,用在这个表之后,我将该表删除,但是序列的值还是停留在之前的值上,所以需要注意这个问题
- 第三步、利用序列+显式化调用 进行自增
insert into YFF values (seq_yff.nextval,'张三');
insert into YFF values (seq_yff.nextval,'张三');
select * from YFF;
--2利用序列+触发器调用 进行主键自增
此处已经表和序列都用第一种方法中使用过的
第一步、在表和序列创建好之后,创建触发器
--创建触发器
create or replace trigger tri_yff_insert
before insert on YFF
referencing old as old new as new
for each row
begin
select seq_yff.nextval
into :new.ID
from dual;
end tri_yff_insert;
--创建触发器格式
create [or replace] tigger 触发器名
触发时间 触发事件
on 表名
[for each row]
begin
pl/sql语句
end
--解释上面的触发器语句
create or replace trigger tri_yff_insert 创建触发器并命名
before insert on YFF 触发时间为向表YFF中插入时
referencing old as old new as new
for each row 对表的每一行触发一次,否则只对整表执行一次
begin
select seq_yff.nextval
into :new.ID
from dual;
end tri_yff_insert;
- 其他对触发器的操作
--查询表中触发器
select * from all_triggers WHERE table_name='YFF'
--删除触发器
drop trigger tri_yff_insert;
- 第二步、插入数据
insert into YFF (ID,Name) values(100,'李四');
insert into YFF (Name) values('李四');
--不管给不给主键赋值,这里触发器都会使得主键值为序列的值
Oracle数据库主键自增相关推荐
- Navicat:设置Oracle数据库主键自增
一. 创建如下表 Oracle数据库不同于Mysql.Sql Server数据库,Oracle数据库主键自增不能在建表时直接设置,而是需要通过序列和触发器进行设置! 二.创建序列 create seq ...
- Mybatis使用Oracle数据库主键自增
一.关于mysql和oracle主键自增 我们知道在mysql中主键设置为int类型,然后设置AUTO_INCREMENT,则在插入数据的时候mapper中的sql文件是可以不写主键这个字段,数据库就 ...
- Oracle数据库主键自增的两种方式(SEQUENCE和触发器)
1.准备工作 创建oracle数据库表,用户表 SYS_USERS 其中user_id为主键 -- Create table create table SYS_USERS (user_id NUMBE ...
- oracle数据库主键自增序列_Oracle数据库主键自增
Oracle数据库主键自增 在学习mysql时,我们很容易通过auto_increment就能实现主键自增的功能,但是在Oracle数据库中,是没有这个关键字的,所以也不能通过这样来实现主键自增.下面 ...
- 数据库主键自增插入显示值
版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/nwsuaf2009012882/article/details/32703597 SQL Serve ...
- mysql主键自增为什么在插入的时候还要自己写主键值_数据库主键自增插入显示值...
SQL Server 2008 数据库主键自增插入显示值 前几天在工作的时候遇到在删除数据库中表的数据的时候,删除之后,重新添加的数据没有得到原来的数据的id值(表中id为主键,且设置为自增) ,使用 ...
- 数据库主键自增到最大值
使用mysql数据库: 因为数据库主键增长到啦最大值,数据id达到了20亿,查询数据好像只有200万数据: int字段:数据的范围在-2^31~2^31-1 2^31-1 = 2147483647 u ...
- sequence解决oracle数据库主键不自增
工作这么多年.总算遇到一家数据库用oracle的企业了,由于oracle与mysql的不同,mysql设置了主键(id),那他就会实现自增,插入数据时,无需指定id的值,但是oracle却无法实现主键 ...
- oracle数据库主键自增序列_Oracle数据库序列详解
前言: 做过web开发的人员基本上都知道,数据库表中的主键值有的时候我们会用数字类型的并且自增.这样mysql.sql server中的都可以使用工具创建表的时候很容易实现.但是oracle中没有设置 ...
最新文章
- 聚合复合_【专家视觉】聚合物接枝多壁碳纳米管及其聚氨酯复合材料
- Web API之service worker
- 应用商店后台MIS的一些思考
- Maven-Dependency Mechanism
- Codeforces Round #277 (Div. 2) A. Calculating Function 水题
- 博主已开启评论精选什么意思_小白必看!想要成为小红书博主,首先要掌握4个工具!...
- 2021水电消纳交易电量增长超150% 价格已提高16%
- Flutter之ParentDataWidget和RenderObjectWidget详解
- 共享网络获取树莓派ip_树莓派网络设置
- hp 服务器 sd卡作用,用4张卡聊一聊SD卡规范
- C++ socket编程实例
- mac安装指定版本的ruby_Mac 下安装Ruby环境
- python--实现汇率转换
- wps下载的简历无法删除空白页
- TI DM36X 名词
- 2016 Unicode Conference拾遗(一)
- Android平台开发指导(Android Porting Guide)
- android App中bug收集的工具类
- MRC误码率的matlab仿真
- 拼夕夕买家订单数据提取
热门文章
- pos机 一直连接服务器,pos机刷卡一直在连接中是怎么回事
- TA大数据分析系统的高可用架构从设计到实现
- 《Context Encoding for Semantic Segmentation》论文笔记
- 初窥哥德尔不完备定理
- excel和csv区别pythonvin号_Python处理CSV,Excel,PDF和图片
- 发那科机器人override指令_发那科工业机器人:如何调整速度倍增器?——发那科工业机器人...
- python电脑上怎么下载-Python下载和安装图文教程[超详细]
- cron 表达式 1小时30分钟,100分钟执行一次
- 微信订单下单管理软件怎么样?好不好用?
- 音频翻译字幕中文在线怎么弄?不妨看看这三个方法