oracle 实现自增需要创建 squence(序列);
如果需要插入时自动增加还需要创建一个 trigger(触发器),否则需要在程序中手工设置
例如:将表fcbook的主键fid设置为自增
1. 创建squence
Name : 创建的名字
Min value : 最小计数
Max value : 最大计数
Start with : 起始计数
Increment by : 步长
Cache size : 缓存序列
指定Cache,oracle会预先在内存中放置一组指定大小的序列,当使用完这些序列后再生成下一组,这样会存取得快些,但当数据库关闭等情况时,下一次再生成序列时可能会使序列间断,不是一串连续的号,当不是特别需要连续的序列时最好指定;
不填写Cache值,会使用默认设置,我这里是20;
当Cache size设置为0时 为nocache,这样会产生连续的序列。
Cycle : 循环序列,当到达最大值后从最小值重新开始
Order : 保证序列产生的顺序和请求的顺序是一致的,在并行模式下如果A、B同时对序列请求那么先产生的序列号必然返回给先请求的用户。例如当前序列号为10,A先请求B后请求那么11一定返回给A,12给B,在noorder的情况下,有可能11给B,12给A。这种情况只发生在oracle并行服务器上,大多数情况下不需要。
相应的squence创建sql:
-- Create sequencecreate sequence Rayn.SEQ_FCBOOKminvalue 1maxvalue 99999999999start with 1increment by 1cache 20;
复制代码
2. 创建 trigger
ORACLE触发器有以下两类:
1> 语句级(Statement-level)触发器,在CREATE TRIGGER语句中不包含FOR EACH ROW子句。语句级触发器对于触发事件只能触发一次,而且不能访问受触发器影响的每一行的列值。一般用语句级触发器处理有关引起触发器触发的SQL语句的信息——例如,由谁来执行和什么时间执行。
2> 行级(Row-level)触发器,在CREATE TRIGGER语句中包含FOR EACH ROW子句。行级触发器可对受触发器影响的每一行触发,并且能够访问原列值和通过SQL语句处理的新列值。行级触发器的典型应用是当需要知道行的列值时,执行一条事务规则。
OK确认后,需要输入trigger_body,对应的sql补全为:
create or replace trigger TR_FCBOOK before insert on fcbook for each rowbegin SELECT SEQ_FCBOOK.Nextval INTO :new.fid FROM dual;end TR_FCBOOK;
复制代码
上语法中,trigger_event 是对应于DML的三条语句INSERT、UPDATE、DELETE;table_name是与触发器相关的表名称;FOR EACH ROW是可选子句,当使用时,对每条相应行将引起触发器触发;condition是可选的ORACLE BOOLEAN条件,当条件为真时触发器触发;trigger_body是触发器触发时执行的PL/SQL块。
在触发器体内,行级触发器可以引用触发器触发时已存在的行的列值,这些值倚赖于引起触发器触发的SQL语句。
1> 对于INSERT语句,要被插入的数值包含在new.column_name,这里的column_name是表中的一列。
2> 对于UPDATE语句,列的原值包含在old.column_name中,数据列的新值在new.column_name中。
3> 对于DELETE语句,将要删除的行的列值放在old.column_name中。
Bloodmage的放逐 oracle 自增 auto_increment (附plsql wizard)
分享到:
相关推荐
### MySQL AUTO_INCREMENT 主键详解 在数据库设计与应用中,主键是确保数据表每一行记录唯一性的关键机制之一。而`AUTO_INCREMENT`属性则是在MySQL数据库系统中为某些整数类型的主键自动分配唯一值的功能。下面我们...
要修改这些设置,可以使用`SET`语句,比如`SET auto_increment_increment=10`将自增步长设置为10,而`SET auto_increment_offset=2`将初始值设定为2。请注意,如果`auto_increment_offset`的值大于`auto_increment_...
auto_increment_value = table_status[6] # 该列为AUTO_INCREMENT值 print("Current AUTO_INCREMENT value:", auto_increment_value) except Error as e: print("Error while fetching table status", e) ``` 3....
MySQL 序列 AUTO_INCREMENT详解及实例代码 MySQL序列是一组整数:1, 2, 3, …,由于一张数据表只能有一个字段自增主键, 如果你想实现其他字段也实现自动增加,就可以使用MySQL序列来实现。 本章我们将介绍如何使用...
在MySQL数据库中,自增列(AUTO_INCREMENT)是一种非常有用的特性,它允许表中的某列在插入新记录时自动递增其值。当你需要重置这个初始值时,可能是因为数据库进行了一些清理操作或者需要从特定数值开始重新计数。...
在MySQL数据库中,`auto_increment` 是一个非常重要的特性,它允许系统自动为新插入的行生成唯一的标识符,通常用于主键字段。这个特性在处理大量数据时尤其有用,因为它消除了手动分配唯一ID的需求。本文将详细介绍...
在MySQL数据库中,`auto_increment` 是一个非常重要的特性,它允许在插入新记录时自动为某个整数字段(通常是主键)生成唯一的递增值。当你清空一个具有`auto_increment`字段的表,然后重新插入数据时,可能会发现这...
04_auto_increment.avi MYSQL应用 MYSQL视频 MYSQL教程,讲解中连接上一集03集
通过SHOW CREATE TABLE命令显示表的创建语句,可以看到自增列的AUTO_INCREMENT值已经被更新。最后,使用SELECT last_insert_id();命令得到的结果是0,这是因为MySQL重启之后,内存中的自增计数器被重置。 最后,...
下面给出ORACLE的一种实现方式,要分2步走: 1. 建立 SEQUENCE CREATE [ OR REPLACE ] SEQUENCE sequence_identity START WITH initial seed INCREMENT BY step MAXVALUE upper bound [NOMAXVALUE] NOCYCLE [empty] ...
标题“blog_auto_increment”暗示了我们讨论的主题与数据库中的自动递增字段有关,这通常用于在插入新记录时自动生成唯一的标识符。在数据库管理中,自动递增(Auto Increment)是一个非常重要的概念,尤其在关系型...
`auto_increment_offset`参数设定自增序列的起始偏移量,而`auto_increment_increment`则设定每次自增的步长。在上述场景中: - 对于A服务器,我们设置`auto_increment_offset = 1`和`auto_increment_increment = 2...
MySQL提供了两个系统变量来控制自增字段的行为:`auto_increment_offset`和`auto_increment_increment`。前者用于设置自增字段的初始值,后者用于设置自增的步长。例如,要设置自增字段从10开始,每次增加5,可以...
此外,`mongoid_auto_increment` gem 会默认创建一个名为 `increment_counters` 的集合来存储每个自动递增字段的当前值。如果你的数据库中有大量这样的字段,这个集合可能会变得相当大。因此,在设计数据库结构时,...