关于自增想不明白的地方

tomey21 2012-08-19 10:11:54
本人有一点点access和mysql的基础,最近开始想学学oracle,老实说,没有找本书认真看看(实际也在找,找了及本,都是我没法耐心看下去的那种),我更多的是试着创建并操作一个数据库,例如员工数据库,具体地来学习。
发现oracle与access和mysql不同之一就是没有自增字段,虽然可以使用sequence来实现同样的功能,但实在是有点想不通干嘛要这样。
在access、mysql中自增字段常作为一条记录的唯一标识,挺方便的,虽然oracle有sequence,但如果每个表都需要使用自增字段,岂不是要为每个表都建立一个sequence?觉得真是麻烦,一大堆的文件。
或者oracle有更好的其他方式实现记录的唯一标识??
还望大家赐教,谢谢!
...全文
189 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
tomey21 2012-08-24
  • 打赏
  • 举报
回复
可以恢复的呀,好的,这样后空可以继续讨论。
tomey21 2012-08-24
  • 打赏
  • 举报
回复
试下结贴了能回复不??
tomey21 2012-08-24
  • 打赏
  • 举报
回复
最近要忙些别的事了,可能没太多时间花在oracle上了,唉,先结了这个贴了。谢谢大家的关注!
zuozhiji 2012-08-23
  • 打赏
  • 举报
回复
学习一下,什么是guid
tomey21 2012-08-22
  • 打赏
  • 举报
回复
对了,gisinfo说我不会建表,没错,呵呵,我确实是发现自己居然不会在oracle建表,所以才提出这个问题的。
我用access和mysql的方式,发现没有办法建立一个有自增字段作为主键的表,搜索下,有人用sequence实现,于是提了现在这个问题。一个没有主键的表在很多实际应用中可能会遇到问题的,而很多书上的create table的例子不会展示如何建立一个有主键的表,除非你再多看上几个章节,不然你都没法知道如何设置一个合理的主键。
try and error,可以学到很多东西。
tomey21 2012-08-22
  • 打赏
  • 举报
回复
说到效率,小型应用的话,也许是sqlite效率最高??!!
tomey21 2012-08-22
  • 打赏
  • 举报
回复
呵呵,无所谓过不过的。欢迎批评指正。
我刚开始学习oracle,我学习的方式和大多数人不一样,“面向问题的学习”,“面向目的的学习”,楼上gisinfo给我的提示非常好!又引出了我的一些问题,寻找进一步的答案时,会学到更多的东西。老实说,没有太多时间系统学习oracle。我要实现一个目的,为了这个目的我需要做到ABC,而A的完成又需要有1、2、3...如此逐步深入,可能不用读完一本书就可以实现我的目的的吧。
比如,我会进一步弄清楚什么是“序列全局引用”。这些东西可能就是现实项目中最实用的东西,甚至是有些书上并没有详细说明的东西。当然我现在的问题还是比较菜鸟的,甚至可笑的问题吧。
guid的长度超过了我的想象,昨天我就在想,如果只是建立一个小型应用的话,其效率应该比不上integer类型的。
刚才无疑中在网上看到这么一句,觉得说的不错,虽不是针对oracle说的:
使用自增长字段为主键有不少问题,比如维护或是在大型分布应用中主键冲突的解决等。在一些大型分布应用中主键一般选用guid,这可以有效的避免主键冲突,减少对主键维护的工程。当然,对于中小型的应用,自增长字段的好处更多一些,简单、快速。
loveofmylife 2012-08-22
  • 打赏
  • 举报
回复
其实sequence也不一定自增,如果sequence设置了cache没有设置order的话,sequence.nextval的值得顺序是无法保证的,特别是在rac中
如果要实现你说所的自增主键,oracle中一般是sequence+triger,当然也可以insert的时候直接sequence.nextval
你可能会觉得自己多做了很多事情,比mysql等麻烦,但是oracle中的sequence显然更灵活
gisinfo 2012-08-21
  • 打赏
  • 举报
回复
这样问说明你的基本sql没有掌握,或者说你不会建表(有点过不过确实如此)

你只有建立一个序列全局引用即可,可以通过触发器实现,也可以通过默认值实现

guid本来不是太提倡,虽然可以解决全局唯一,但是长字符串如果建立索引效率还是没有数值型字段高的
飞火流星02027 2012-08-21
  • 打赏
  • 举报
回复
mysequence.curval();这个值mysql是取不到的!oracle之所以这么做也是方便管理和维护,而mysql是小型数据库,不会有像oracle那样数量级的数据也不需要维护那样庞大篮复杂的数据。它们的应用的条件和环境不一样
kingstarer 2012-08-20
  • 打赏
  • 举报
回复
没用过自增片段,不过sequence有一个方便的地方自增字段估计是做不到的

就是可以预占(在不插入前先拥有一个唯一序号),预知(在插入前就已经知道唯一序号)

另外,一个表建一个sequence并没什么不好,当然,嫌麻烦可以多个表共用一个sequence
tomey21 2012-08-20
  • 打赏
  • 举报
回复
sequence似乎做流水号更合适些。
ORAClE SE 2012-08-20
  • 打赏
  • 举报
回复
看来楼主已经顿悟了,那么分就应该。。。。
tomey21 2012-08-20
  • 打赏
  • 举报
回复
呵呵,谢谢楼上的提醒,会结的,
只是希望有高人分析地更透彻些,大家岂不是受益更多,
对不
tomey21 2012-08-19
  • 打赏
  • 举报
回复
唯一标识是个很重要的功能,各家实现方式不一样。
记得有次看到一个朋友设计的access后台数据库记录不带唯一标识的,出现不少问题,后来建议其加入自增字段后很多问题就解决了。
access和mysql采用自增字段的方式实现唯一标识,而oracle则有专门的guid,呵呵,名字本身显然就是唯一标用的,挺好的!
tomey21 2012-08-19
  • 打赏
  • 举报
回复
楼上兄弟回答地真是爽快!
呵呵,又快,又爽,一点不废话。
guid?!啊,真没看到这个,查下,学习下!
我主要想了解一下为什么不设计自增字段。
刚查到,guid,可以“全球标识”数据库记录,晕,我整个小数据库的话,真是有些杀鸡用牛刀的感觉,不过oracle确实是牛刀的吧,呵呵。
看样子guid确实就是我需要的替代自增字段的东西。
fw0124 2012-08-19
  • 打赏
  • 举报
回复
如果不用sequence,可以用SYS_GUID()来生成一个guid。
ljjk123 2012-08-19
  • 打赏
  • 举报
回复
guid 或者 序列

17,377

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 基础和管理
社区管理员
  • 基础和管理社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧