求救:Sequence和主键有什么区别?

INTEL_CHIP 2010-05-28 12:37:22
既然同一个Sequence作用于不同的表会造成这些表中主键的不连续,那Sequence还有什么用?我直接每张表都设置一个主键不就可以了吗,插入记录的时候还不用每张表都指定Sequence。

有没有什么办法设置一下,让数据库下面所有的表都共用一个Sequence,这样Insert记录的时候还不用每次都指定Sequence,并且每张表都独立地获取nextval,不过这样的话不就和主键的概念相同了吗,要Sequence还有什么用啊?!
...全文
577 10 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
心中的彩虹 2010-05-28
  • 打赏
  • 举报
回复
[Quote=引用楼主 intel_chip 的回复:]
既然同一个Sequence作用于不同的表会造成这些表中主键的不连续,那Sequence还有什么用?我直接每张表都设置一个主键不就可以了吗,插入记录的时候还不用每张表都指定Sequence。

有没有什么办法设置一下,让数据库下面所有的表都共用一个Sequence,这样Insert记录的时候还不用每次都指定Sequence,并且每张表都独立地获取nextval,不过这样的话不就和主键的概念相……
[/Quote]

Sequence 只是个序列 等于mssql的自增列
主键是主键 两码事
唯有共同点就是唯一
LingXX0103 2010-05-28
  • 打赏
  • 举报
回复
你当然可以不用sequence作为你表的主键的

如果你想表取得的sequence连续 那么就每个表对应一个sequence表(稍微麻烦一点)
INTEL_CHIP 2010-05-28
  • 打赏
  • 举报
回复
我用的就是Oracle
INTEL_CHIP 2010-05-28
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 duqiangcise 的回复:]
oracle中对用户来说没有默认的sequence这样的说法,你不创建sequence,oracle是不会自己给你创建的。
比如你有表t(id)--其中的id表示该表的主键。
你可以这样插入insert into t(id)values(yoursequence_name.nextval);
红色部分是你创建的序列名称。nextval得到该序列的下一个值。即:yoursequence_name.nextval就产生了你想要的主键的值。
[/Quote]

每张表插入记录都要显式指定Sequence的nextval值作为主键值 ?
duqiangcise 2010-05-28
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 intel_chip 的回复:]
引用 1 楼 duqiangcise 的回复:
所以大家通常产生主键值都是通过oracle数据库的序列来完成的)。

好像数据库下面我没建Sequence的话,或者Insert的时候我没有指定Sequence的时候,数据表中主键的值照样都是从1开始的啊,每个用户模式是不是有默认Sequence之说的?表的主键值从哪里来的?
[/Quote]
请问你用的是oracle吗?如果不是用的oracle的话,就当我上面的没有说。
oracle中对用户来说没有默认的sequence这样的说法,你不创建sequence,oracle是不会自己给你创建的。
比如你有表t(id)--其中的id表示该表的主键。
你可以这样插入insert into t(id)values(yoursequence_name.nextval);
红色部分是你创建的序列名称。nextval得到该序列的下一个值。即:yoursequence_name.nextval就产生了你想要的主键的值。

Phoenix_99 2010-05-28
  • 打赏
  • 举报
回复
补充:
1.主键可能有多个
2.如果用id的话,用序列给id赋值,比较灵活,也好管理
INTEL_CHIP 2010-05-28
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 duqiangcise 的回复:]
所以大家通常产生主键值都是通过oracle数据库的序列来完成的)。
[/Quote]
好像数据库下面我没建Sequence的话,或者Insert的时候我没有指定Sequence的时候,数据表中主键的值照样都是从1开始的啊,每个用户模式是不是有默认Sequence之说的?表的主键值从哪里来的?
iqlife 2010-05-28
  • 打赏
  • 举报
回复
SEQUENCE就是SQL SERVER里的自增序列ID,只不过ORACLE用编程的方式给出了而已,并且更加灵活
可以多个表共用一个自增序列,也可以每个表一个自增序列....
duqiangcise 2010-05-28
  • 打赏
  • 举报
回复
要Sequence还有什么用啊?!

sequence序列帮助你维护生成的主键值的唯一性!
duqiangcise 2010-05-28
  • 打赏
  • 举报
回复
主键和序列是两个不相关的概念。
主键能够唯一标识一条记录,用来区分每条记录。
序列能够产生唯一标识的值。你可以用序列产生的值,作为主键的值。其实你如果不想用序列也可以。
不过这样的话,你就需要通过程序(如java)自己产生出一个唯一标识用来作为主键的值(这样做比较麻烦,所以大家通常产生主键值都是通过oracle数据库的序列来完成的)。

对!如果一个序列被几个表引用去作为主键生成器,这样会造成每个表中主键值的不连续性。但主键只是个标识,它是否连续并不影响你什么(除非你业务要求主键值必须连续)!

17,140

社区成员

发帖
与我相关
我的任务
社区描述
Oracle开发相关技术讨论
社区管理员
  • 开发
  • Lucifer三思而后行
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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