ORACLE里的自增字段设置

大家都知道吧,这很坑,尤其是用惯了mysql里的自增字段设置,结果oracle里面没有的。oh,no

我用的是12c版本的,它有一个新特性,可以这样设置自增序列,在创建表是,把id设置为自增序列

create table t 
(
  id        number generated by default as identity (start with 1 increment by 1),
  name      varchar2(20),
  password  varchar2(20),
  Constraint Pk_T Primary Key ( Id )
);

很忧桑的是同伴用的是11g的,那只能通过序列+触发器来实现了;

创建表

-create table t 
(
  id        number,
  name      varchar2(20),
  password  varchar2(20),
  Constraint Pk_T Primary Key ( Id )
);

CREATE SEQUENCE seq_t----------------/*序列名称*/
INCREMENT BY 1 ----------------/*自增1*/
START WITH 1 ----------------/*从1开始*/
NOMAXVALUE ----------------/*没有最大值*/
NOCYCLE
NOCACHE;
CREATE TRIGGER tri_t  BEFORE------------------/*创建触发器*/
INSERT ON t  FOR EACH ROW WHEN (new.id is null)
begin
select seq_t.nextval into: new.id from dual;
end;

时间: 2024-07-29 22:15:20

ORACLE里的自增字段设置的相关文章

Oracle中创建自增字段方法

oracle没有ORACLE自增字段这样的功能,但是通过触发器(trigger)和序列(sequence)可以实现. 下面给大家讲个例子: 1.在Oracle中创建一个表: 1.创建一个表 create table t_client (id number(4) primary key, pid number(4) not null, name varchar2(30) not null, client_id varchar2(10), client_level char(3), bank_acc

Oracle中创建自增字段(序列sequence)方法

oracle没有ORACLE自增字段这样的功能,但是通过触发器(trigger)和序列(sequence)可以实现. 下面给大家讲个例子: 1.在Oracle中创建一个表: 1.创建一个表 create table t_client (id number(4) primary key, pid number(4) not null, name varchar2(30) not null, client_id varchar2(10), client_level char(3), bank_acc

Oracle数据库中,通过function的方式建立自增字段

Oracle数据库无自增字段设置,可以通过function的方式设置字段自增来作为ID. 1.创建表tSequence来存储各表的next ID. 2.创建function类似如下: 1 CREATE OR REPLACE FUNCTION "FUNC_NEXTID" 2 (tablename in varchar2) return number is 3 4 nextid number(12); 5 begin 6 begin 7 select nvl(max(id),-1) int

oracle如何实现自增?----用序列sequence的方法来实现

将表t_user的字段ID设置为自增:(用序列sequence的方法来实现) ----创建表 Create  table  t_user( Id number(6),userid varchar2(20),loginpassword varchar2(20),isdisable number(6) ); ----创建序列 create sequence user_seq increment by 1  start with 1 nomaxvalue nominvalue nocache ----

对数据库里所有表的自增字段初始化

对数据库存储过程还不是很熟练,一时半会还写不出函数,所以就干脆用php写了个程序. 十几个数据库,每个库里都有几百张表,数据全部被清空了,但是表里的自增字段的值却还是保留着原表里的,要全部一次性的还原到初始值,若是一个表一个表的修改,不知道要改到猴年马月. //在系统库查询需要修改的数据库的表名称 $sysDbName="information_schema"; $dbarray=array("db1","db2","db3"

MySQL设置自增字段

1.MySQL每张表只能有1个自增字段,这个自增字段即可作为主键,也可用作非主键使用,但是请注意将自增字段当做非主键使用时必须为其添加唯一索引,否则系统将会报错 1)将自动增长字段设置为主键 CREATE TABLE t1 ( id INT auto_increment PRIMARY KEY, sid INT ); 2)将自动增长字段设置为非主键 CREATE TABLE t2 ( sid INT PRIMARY KEY, id INT auto_increment UNIQUE ); 3)将

Oracle在表上建立自增字段的方法

本方法为使用SEQUENCE(序列) 例如有表temp_test结构为: create table TEMP_TEST ( id number, nm varchar(10), primary key(id)   //id为主键,下面的方法把它设为自增字段) 1.建立自增序列TEMP_TEST_IDADD,命名任意,从1开始,每次加1 CREATE SEQUENCE TEMP_TEST_IDADD INCREMENT BY 1 START WITH 1; 2.在表temp_test上建立触发器如

[DB][MySql]关于取得自增字段的值、及@@IDENTITY 与并发性问题

对于刚从Oracle转向MySql的人都会为,MySql中没有Oracle里的Sequence而感到困惑.MySql中没有了Sequence,那么MySql的主键用什么方式来实现最好呢? 主要有下面几种方式: 1.自增字段作为主键. [推荐方案] MySql尽管比Oracle少了Sequence,可是多了字段的自增长特性. 插入完了以后能够通过运行[SELECT @@IDENTITY]获取上一条插入语句中生成的自增长字段的值. 这个语句非常特别,没有关联到特定的SQL语句,会 让人感觉迷糊,他究

oracle中实现自增id

在一些数据库(例如mysql)中,实现自增id只要在建表的时候指定一下即可, 但是在oracle中要借助sequence来实现自增id, 要用上自增id,有几种方式: 1.直接在insert语句中使用sequence的nextval. 2.在建表时为字段设置default,这种方式我还没测试. 3.使用触发器,关于触发器的方式,从别人那得到了一个示例,暂且先贴到这里作为备忘.我觉得如果default方式如果可用的话,会比使用触发器的方式简单. 以下是触发器方式相关的代码: CREATE TABL