楼主: sating

删除序列后,为什么序列值不能从新开始1,2,3~~~

[复制链接]
论坛徽章:
5
授权会员
日期:2005-10-30 17:05:33会员2006贡献徽章
日期:2006-04-17 13:46:34会员2007贡献徽章
日期:2007-09-26 18:42:10ITPUB新首页上线纪念徽章
日期:2007-10-20 08:38:44行业板块每日发贴之星
日期:2008-07-01 01:02:17
11#
发表于 2005-3-22 08:03 | 只看该作者
最初由 Kamus 发布
[B]

其实我觉得sqlserver那个递增PK的数据类型是很好的
简单实用
Oracle完全应该借鉴 [/B]


这个难说,sqlserver的那个Identity如果删除该字段最大值的一行
那么下一回插入将还是那个值,所以我觉得sqlserver可能是用最大值实现的

使用道具 举报

回复
论坛徽章:
1
会员2006贡献徽章
日期:2006-04-17 13:46:34
12#
 楼主| 发表于 2005-3-22 08:25 | 只看该作者
最初由 xipipku 发布
[B]没有办法指定某个序列是哪个表的,序列与表的关系只能由应用去保证 [/B]



1.怎么由应用去保证呢?一个数据库里会有很多的序列,我在任意表里加条记录,那么哪个序列值会增加呢?

2.为什么一个数据库要建立多个序列呢?我觉得一个就可以了,既然没办法指定是哪个表的。

3.在表里删除一条记录,那么当前序列的值会减少吗?

使用道具 举报

回复
论坛徽章:
5
ITPUB元老
日期:2005-02-28 12:57:00授权会员
日期:2005-10-30 17:05:33蓝色妖姬
日期:2006-04-12 22:10:01会员2006贡献徽章
日期:2006-04-17 13:46:34
13#
发表于 2005-3-22 09:30 | 只看该作者
最初由 Kamus 发布
[B]

其实我觉得sqlserver那个递增PK的数据类型是很好的
简单实用
Oracle完全应该借鉴 [/B]


oracle 无法保证它的序列是依次增加的,就是说中间可能会跳过一些数. 不过偶没遇到过.

使用道具 举报

回复
论坛徽章:
1
会员2006贡献徽章
日期:2006-04-17 13:46:34
14#
 楼主| 发表于 2005-3-22 13:38 | 只看该作者
最初由 sating 发布
[B]


1.怎么由应用去保证呢?一个数据库里会有很多的序列,我在任意表里加条记录,那么哪个序列值会增加呢?

2.为什么一个数据库要建立多个序列呢?我觉得一个就可以了,既然没办法指定是哪个表的。

3.在表里删除一条记录,那么当前序列的值会减少吗? [/B]



哪未大侠能帮我解答一下吗?不胜感激!!!!!

使用道具 举报

回复
论坛徽章:
31
授权会员
日期:2005-10-30 17:05:332012新春纪念徽章
日期:2012-02-13 15:09:232012新春纪念徽章
日期:2012-02-13 15:09:232012新春纪念徽章
日期:2012-02-13 15:09:232012新春纪念徽章
日期:2012-02-13 15:09:23马上有车
日期:2014-02-19 11:55:14马上有房
日期:2014-02-19 11:55:14马上有钱
日期:2014-02-19 11:55:14马上有对象
日期:2014-02-19 11:55:142012新春纪念徽章
日期:2012-02-13 15:09:23
15#
发表于 2005-3-22 13:44 | 只看该作者
最初由 sating 发布
[B]


哪未大侠能帮我解答一下吗?不胜感激!!!!! [/B]


建议把问题改为什么是SEWUENCE和SEQUENCE的作用是什么比较好
为什么在问这些以前不能好好看下相关的SEQUENCE的定义呢?
你问的那三个问题完全是对概念理解的问题

使用道具 举报

回复
论坛徽章:
25
每日论坛发贴之星
日期:2005-05-23 01:01:10马上有对象
日期:2014-02-19 11:55:14马上有钱
日期:2014-02-19 11:55:14马上有房
日期:2014-02-19 11:55:14马上有车
日期:2014-02-19 11:55:142012新春纪念徽章
日期:2012-02-13 15:08:092012新春纪念徽章
日期:2012-02-13 15:08:092012新春纪念徽章
日期:2012-02-13 15:08:092012新春纪念徽章
日期:2012-02-13 15:08:092012新春纪念徽章
日期:2012-02-13 15:08:09
16#
发表于 2005-3-22 14:00 | 只看该作者
最初由 Kamus 发布
[B]

其实我觉得sqlserver那个递增PK的数据类型是很好的
简单实用
Oracle完全应该借鉴 [/B]


呵呵.
Kamus有没有考虑过以下情况:
如果一个transaction中有以下操作:
1. 新增一条customer记录.(其中customer_id是PK).
2. 在另外的表中需同时新增日志记录,缴费记录,且这些都需引用到customer_id,而且它们也有各自的log sequence.
这时该怎么办呢?

使用道具 举报

回复
论坛徽章:
25
每日论坛发贴之星
日期:2005-05-23 01:01:10马上有对象
日期:2014-02-19 11:55:14马上有钱
日期:2014-02-19 11:55:14马上有房
日期:2014-02-19 11:55:14马上有车
日期:2014-02-19 11:55:142012新春纪念徽章
日期:2012-02-13 15:08:092012新春纪念徽章
日期:2012-02-13 15:08:092012新春纪念徽章
日期:2012-02-13 15:08:092012新春纪念徽章
日期:2012-02-13 15:08:092012新春纪念徽章
日期:2012-02-13 15:08:09
17#
发表于 2005-3-22 14:10 | 只看该作者
最初由 li2 发布
[B]

oracle 无法保证它的序列是依次增加的,就是说中间可能会跳过一些数. 不过偶没遇到过. [/B]


要模拟这种情况太简单了.
1.在单instance下
create sequence seq1;
select seq1.nextval from dual;
shutdown abort
startup
select seq1.nextval from dua;

因为缺省是在内存中cache 20,abort后肯定会丢失内存中cache的sequence的.具体可查dba_sequences.

2. 在RAC下.
则可去查一下sql reference中create sequence中ORDER/NOORDER clause的用法说明.

使用道具 举报

回复
论坛徽章:
314
行业板块每日发贴之星
日期:2012-07-12 18:47:29双黄蛋
日期:2011-08-12 17:31:04咸鸭蛋
日期:2011-08-18 15:13:51迷宫蛋
日期:2011-08-18 16:58:25紫蛋头
日期:2011-08-31 10:57:28ITPUB十周年纪念徽章
日期:2011-09-27 16:30:47蜘蛛蛋
日期:2011-10-20 15:51:25迷宫蛋
日期:2011-10-29 11:12:59ITPUB十周年纪念徽章
日期:2011-11-01 16:19:41鲜花蛋
日期:2011-11-09 20:33:30
18#
发表于 2005-3-22 15:27 | 只看该作者
最初由 披发头陀 发布
[B]

这个难说,sqlserver的那个Identity如果删除该字段最大值的一行
那么下一回插入将还是那个值,所以我觉得sqlserver可能是用最大值实现的 [/B]


这个好说,可以在定义的时候说明是否重复利用被删除的ID。

使用道具 举报

回复
论坛徽章:
314
行业板块每日发贴之星
日期:2012-07-12 18:47:29双黄蛋
日期:2011-08-12 17:31:04咸鸭蛋
日期:2011-08-18 15:13:51迷宫蛋
日期:2011-08-18 16:58:25紫蛋头
日期:2011-08-31 10:57:28ITPUB十周年纪念徽章
日期:2011-09-27 16:30:47蜘蛛蛋
日期:2011-10-20 15:51:25迷宫蛋
日期:2011-10-29 11:12:59ITPUB十周年纪念徽章
日期:2011-11-01 16:19:41鲜花蛋
日期:2011-11-09 20:33:30
19#
发表于 2005-3-22 15:32 | 只看该作者
最初由 Puber 发布
[B]

呵呵.
Kamus有没有考虑过以下情况:
如果一个transaction中有以下操作:
1. 新增一条customer记录.(其中customer_id是PK).
2. 在另外的表中需同时新增日志记录,缴费记录,且这些都需引用到customer_id,而且它们也有各自的log sequence.
这时该怎么办呢? [/B]


可以这样定义这个字段的外键属性:引用已经存在的主键值(人为
输入),或者使用已经存在的最大值,或者即将产生的最大值!

我一直都认为ORACLE应该学习SQL SERVER的一些特性。

使用道具 举报

回复
论坛徽章:
25
每日论坛发贴之星
日期:2005-05-23 01:01:10马上有对象
日期:2014-02-19 11:55:14马上有钱
日期:2014-02-19 11:55:14马上有房
日期:2014-02-19 11:55:14马上有车
日期:2014-02-19 11:55:142012新春纪念徽章
日期:2012-02-13 15:08:092012新春纪念徽章
日期:2012-02-13 15:08:092012新春纪念徽章
日期:2012-02-13 15:08:092012新春纪念徽章
日期:2012-02-13 15:08:092012新春纪念徽章
日期:2012-02-13 15:08:09
20#
发表于 2005-3-22 19:43 | 只看该作者
最初由 ZALBB 发布
[B]

可以这样定义这个字段的外键属性:引用已经存在的主键值(人为
输入),或者使用已经存在的最大值,或者即将产生的最大值!

我一直都认为ORACLE应该学习SQL SERVER的一些特性。 [/B]


如果日志或缴费表不在同一个数据库中呢?
或者我使用数组作批量数据的操作呢?


而且,在OLTP系统中,如何理解[B]存在的最大值,或者即将产生的最大值[/B]?

使用道具 举报

回复

您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

TOP技术积分榜 社区积分榜 徽章 团队 统计 知识索引树 积分竞拍 文本模式 帮助
  ITPUB首页 | ITPUB论坛 | 数据库技术 | 企业信息化 | 开发技术 | 微软技术 | 软件工程与项目管理 | IBM技术园地 | 行业纵向讨论 | IT招聘 | IT文档
  ChinaUnix | ChinaUnix博客 | ChinaUnix论坛
CopyRight 1999-2011 itpub.net All Right Reserved. 北京盛拓优讯信息技术有限公司版权所有 联系我们 未成年人举报专区 
京ICP备16024965号-8  北京市公安局海淀分局网监中心备案编号:11010802021510 广播电视节目制作经营许可证:编号(京)字第1149号
  
快速回复 返回顶部 返回列表