惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

雷峰网
雷峰网
G
Google Developers Blog
D
Docker
The GitHub Blog
The GitHub Blog
H
Help Net Security
WordPress大学
WordPress大学
博客园_首页
Recent Announcements
Recent Announcements
P
Proofpoint News Feed
罗磊的独立博客
I
InfoQ
U
Unit 42
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
V
Visual Studio Blog
Jina AI
Jina AI
J
Java Code Geeks
博客园 - Franky
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
大猫的无限游戏
大猫的无限游戏
小众软件
小众软件
Last Week in AI
Last Week in AI
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
D
DataBreaches.Net
Google DeepMind News
Google DeepMind News

博客园 - Robert.H.fu

国内最大的免费空间站,国内最便宜最稳定的空间 编程连接远程SQL服务器出现问题及对策 SQL Server 中的时间算法 sql server 2008 CDC sql server & excel 保持一颗好学之心 log4net 配置 在ubuntu 下安装Oracle 11g 今年国庆过得特别快 J2EE中的13种技术规范 AMO 对象模型 Oracle常用数据字典表 怎样提高自己-驱动你的同事 七个爱情故事 人生拥有的,是不断的抉择 中国书信礼仪 (三) 中国书信礼仪 (二) 中国书信礼仪 (一) 学会提问
在oracle中使用自增字段
Robert.H.fu · 2008-10-12 · via 博客园 - Robert.H.fu

在oracle中使用自增字段

大家都知道,oracle是不支持auto_increment字段的,但可以通过创建Sequence对象来使用自增序列,语法是:

SQL代码

  1. create sequence SEQ_SUBS_ID
  2. increment by 1
  3. start with 1
  4. maxvalue 10000000000
  5. nocycle ;  

其中SEQ_SUBS_ID为序列名,increment by 1表示步长为1,start with 1表示初始值为1,maxvalue表示最大值 nocycle表示不可循环取值

要查看已创建的Sequence,执行的语句是:

SQL代码

  1. select * from user_sequences;  

其中返回的SEQUENCE_NAME为序列名,LAST_NUMBER为当前值

要取得下一ID,可以使用:

SQL代码

  1. select  序列名.nextval from 表名  

这个语句会返回多个序列号(会被缓存起来),要取得一个序号,表名使用dual(虚表)即可

使用PEAR::DB操作

PEAR::DB使用nextId($seqName)来封装了自增序列的操作,如果是mysql,pear同样放弃字段自增的功能,而使用创建一个表的方法去管理自增ID,而在ORACLE中,则直接使用SEQUENCE对象操作

即在pear::DB中,要获得下一ID,不管是使用MYSQL还是ORACLE,都使用$db -> nextId($seqName)即可,一般地$seqName为表名,当指定的序列未存在时,可使用第二参数指定自动创建

在pear内部,nextId会将$seqName按指定的格式处理,默认是加上"_seq"的后缀,所以,如果你操作的是已存在的使用其它方式创建的序列,很可能会发生冲突,要改变这一格式,使用

PHP代码

  1. $db -> setOption('seqname_format',"SEQ_%s");//经这样修改,nextId('TABLE1')所操作的SEQUENCE变成了SEQ_TABLE1了(如果是默认,则是TABLE1_seq)