oracle 主键应用序列和触发器实现自动增长

oracle 主键自动增长

这几天搞Oracle,想让表的主键实现自动增长,查网络实现如下:

create table simon_example

(

id number(4) not null primary key,

name varchar2(25)

)

-- 建立序列:

-- Create sequence

create sequence SIMON_SEQUENCE

minvalue 1

maxvalue 999999999999999999999999999

start with 1

increment by 1

cache 20;

-- 建立触发器

create trigger "simon_trigger" before

insert on simon_example for each row when(new.id is null)

begin

select simon_sequence.nextval into:new.id from dual;

end;

-------------------------------------------------------------------------

2、从序列中获取自动增长的标识符

在Oracle中,可以为每张表的主键创建一个单独的序列,然后从这个序列中获取自动增加的标识符,把它赋值给主键。例如一下语句创建了一个名为customer_id_seq的序列,这个序列的起始值为1,增量为2。

create sequence customer_id_seq increment by 2 start with 1

一旦定义了customer_id_seq序列,就可以访问序列的curval和nextval属性。

curval:返回序列的当前值

nextval:先增加序列的值,然后返回序列值

以下sql语句先创建了customers表,然后插入两条记录,在插入时设定了id和name字段的值,其中id字段的值来自于customer_id_seq序列。最后查询customers表中的id字段。

create table customers(id int primary key not null, name varchar(15));

insert into customers values(customer_id_seq.curval, "name1"),(customer_id_seq.nextval, "name2");

select id from customers;

如果在oracle中执行以上语句,查询结果为:

id

1

3

----------------------------------------------------------------

比如我现在创建一个表:student

create table STUDENT
(
ID NUMBER not null,
NAME VARCHAR2(20) default ‘男‘,
SEX VARCHAR2(4),
ADDRESS VARCHAR2(40),
MEMO VARCHAR2(60)
)

现在我想实现每插入一条数据,就让id自动增长1.在SQLSERVER中这个很好实现,但在oracle中我搞了半天,查了下资料发现要用到“序列(sequence)”,“触发器”的知识。

首先,创建一个序列:

create sequence STU
minvalue 1
maxvalue 999999999999
start with 21
increment by 1
cache 20;

然后,给表student创建一个触发器:

create or replace trigger stu_tr
before insert on student 
for each row
declare
-- local variables here
begin
select stu.nextval into :new.id from dual;
end stu_tr;

oracle 主键应用序列和触发器实现自动增长

时间: 2024-11-10 14:35:03

oracle 主键应用序列和触发器实现自动增长的相关文章

插入一条新数据,如何返回主键值id,id是自动增长的

strSQL = "INSERT INTO tablename (name) VALUES (@name);SELECT @@Identity" SQLCommand.CommandText = strSQL Id = SQLCommand.ExecuteScalar()

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序列的初始值(即产生的第一个值),

Mysql,SqlServer,Oracle主键自动增长的设置

1.把主键定义为自动增长标识符类型 MySql 在mysql中,如果把表的主键设为auto_increment类型,数据库就会自动为主键赋值.例如:   customers(id  auto_increment    , name (  customers(name)  id  customers; 以上sql语句先创建了customers表,然后插入两条记录,在插入时仅仅设定了name字段的值.最后查询表中id字段,查询结果为: 由此可见,一旦把id设为auto_increment类型,mys

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

Oracle主键异常处理

Hibernate: insert into test1.WarnWeather (WAREA, wdate, WDAYS, WINFO, WTYPE, WNO) values (?, ?, ?, ?, ?, ?)Hibernate: select weathers0_.WNO as WNO1_0_, weathers0_.WAREA as WAREA2_0_, weathers0_.wdate as wdate3_0_, weathers0_.WDAYS as WDAYS4_0_, weath

Oracle主键及约束

Oracle主键Primary Key包含非空约束及唯一约束. 添加主键的语句 alter table table_name add constraint cons_name primary key(col_name); 查看主键是否被创建成功 select dbms_metadata.get_ddl('OBJECT_TYPE','NAME','SCHEMA') from dual; OBJECT_TYPE (TABLE,PARTITION,INDEX......) NAME (OBJECT_N

ODI 目标表主键有序列的同步处理

在目标主键上赋值: <%=snpRef.getObjectName( "L" , "序列名" , "D" )%>.NEXTVAL ODI 目标表主键有序列的同步处理

oracle 主键生成策略-sequence序列+trigger触发器

oracle中设置表的主键字段为自增序列(实例)1.首先创建一个表(如日志表) //删除库表中存在的日志表drop table S_LOG_INFO cascade constraints;//新建日志表create table S_LOG_INFO ( PRIMARYKEY NUMBER not null,//主键 USERACCOUNT VARCHAR2(50),//操作用户账号 USERNAME VARCHAR2(100),//操作用户 OPERATIONTIME DATE,//操作时间

MySQL 和 Oracle 主键自增长

1.MySQL 1)建表 auto_increment:每插入一条数据,客户表(customers)的主键id就自动增1,如下所示 1 create table customers -- 创建客户表 2 ( 3 id int auto_increment primary key not null, -- auto_increment:自增长 4 name varchar(15) 5 ); 6 2)测试(实例) 1 insert into customers(name) values("张三&qu