IT技术博客大学习 共学习 共进步
全部 移动开发 后端 数据库 AI 算法 安全 DevOps 前端 设计 开发者

在oracle中使用自增字段

PHPec 2009-10-16 12:07:23 累计浏览 2,845 次
本机暂存

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

SQL代码
create sequence SEQ_SUBS_ID

     increment by 1

     start with 1

     maxvalue 10000000000

     nocycle ;  

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

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

SQL代码
select * from user_sequences;  

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

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

SQL代码
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代码
$db -> setOption(\'seqname_format\',"SEQ_%s");//经这样修改,nextId(\'TABLE1\')所操作的SEQUENCE变成了SEQ_TABLE1了(如果是默认,则是TABLE1_seq)  

同分类推荐文章

  1. 使用deepseek进行Oracle恢复,引起重大故障 (2026-06-22 10:56:00)
  2. 接手一个只差临门一脚的数据库恢复 (2026-06-18 00:13:09)
  3. 我做了一个 AI 版的 StarRocks 升级风险扫描工具,直接帮我定位到一个风险 (2026-06-15 01:00:00)

查看更多 数据库 文章 →

建议继续学习

  1. MySQL数据库在实际应用一些方面的介绍 (累计阅读 36,397)
  2. 如何查找消耗资源较大的SQL (累计阅读 15,210)
  3. Oracle MTS模式下 进程地址与会话信息 (累计阅读 14,408)
  4. 其实,文件也可以truncate (累计阅读 8,574)
  5. MariaDB常见问题FAQ (累计阅读 8,344)
  6. SQL vs NoSQL:数据库并发写入性能比拼 (累计阅读 8,003)
  7. Mysql的随机读取 (累计阅读 7,863)
  8. 索引与优化like查询 (累计阅读 7,337)
  9. 在百度的第一年 (累计阅读 6,922)
  10. 那些在11gR2中可能惹祸的新特性,一张列表帮助你摆脱升级11gR2带来的烦恼 (累计阅读 6,879)