日期:2014-05-17  浏览次数:20671 次

关于自增想不明白的地方
本人有一点点access和mysql的基础,最近开始想学学oracle,老实说,没有找本书认真看看(实际也在找,找了及本,都是我没法耐心看下去的那种),我更多的是试着创建并操作一个数据库,例如员工数据库,具体地来学习。
发现oracle与access和mysql不同之一就是没有自增字段,虽然可以使用sequence来实现同样的功能,但实在是有点想不通干嘛要这样。
在access、mysql中自增字段常作为一条记录的唯一标识,挺方便的,虽然oracle有sequence,但如果每个表都需要使用自增字段,岂不是要为每个表都建立一个sequence?觉得真是麻烦,一大堆的文件。
或者oracle有更好的其他方式实现记录的唯一标识??
还望大家赐教,谢谢!

------解决方案--------------------
guid 或者 序列
------解决方案--------------------
如果不用sequence,可以用SYS_GUID()来生成一个guid。
------解决方案--------------------
看来楼主已经顿悟了,那么分就应该。。。。
------解决方案--------------------
没用过自增片段,不过sequence有一个方便的地方自增字段估计是做不到的

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

另外,一个表建一个sequence并没什么不好,当然,嫌麻烦可以多个表共用一个sequence

------解决方案--------------------
mysequence.curval();这个值mysql是取不到的!oracle之所以这么做也是方便管理和维护,而mysql是小型数据库,不会有像oracle那样数量级的数据也不需要维护那样庞大篮复杂的数据。它们的应用的条件和环境不一样
------解决方案--------------------
这样问说明你的基本sql没有掌握,或者说你不会建表(有点过不过确实如此)

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

guid本来不是太提倡,虽然可以解决全局唯一,但是长字符串如果建立索引效率还是没有数值型字段高的
------解决方案--------------------
其实sequence也不一定自增,如果sequence设置了cache没有设置order的话,sequence.nextval的值得顺序是无法保证的,特别是在rac中
如果要实现你说所的自增主键,oracle中一般是sequence+triger,当然也可以insert的时候直接sequence.nextval
你可能会觉得自己多做了很多事情,比mysql等麻烦,但是oracle中的sequence显然更灵活