oracle中的自增长列要通过sequence+trigger来实现
能确定列插入的先后顺序,不会出现重复子段
缺点:
如果用这个列作主键,oracle会自动创建一个索引,
但这个索引基本没什么作用
如果业务能确定主键的话,我认为比用这个好。
能确定列插入的先后顺序,不会出现重复子段
缺点:
如果用这个列作主键,oracle会自动创建一个索引,
但这个索引基本没什么作用
如果业务能确定主键的话,我认为比用这个好。
解决方案 »
- PL/sql 中的查询问题
- 初学者,看什么书了解oracle数据库?
- 高手请看,一个不好解决的问题(急等回复)
- 【高手帮忙】我想知道学习数据库的步骤为dba做准备的学要怎么来学?
- 数据缩位的问题
- 同义词的问题
- 在sqlplus中如何获取帮助。
- SQL> sqlldr userid=system/manager@ mingal control=input.ctl这错在哪?
- Oracle8i出现Oracle Intelligent Agent Executable错误怎么办?
- 很容易说明白,但很难写的SQL
- 请教 ORACLE 8I 的安装问题
- 求一条sql语句:如果这个人有2个或以上的记录,则把他列出来
insert的时候取seq_name.nextval也可以
插入了一行,但是你并不知道自增长列的值是多少,所以,在往子表中插入数据时就很困难。
而Oracle做的就不错,通过序列来完成,不会有这方面的问题。
在数据库设计中,主表里的主键通常需要作为子表的外键,这样如果将业务字段作为主键的话,1是该字段数据在发生变化时需要修改主表及子表,麻烦!如果业务升级需要修改字段定义的话,就更麻烦了;2是业务数据往往比较长(甚至是几个字段的联合),这样主表的该字段索引也比较大,子表中重复数据(冗余)就大了,在插入、修改时需要查询主表该索引的值,所需要的时间就长了。
因此数据库设计中往往使用一个仅作为主键使用的int字段,它没有业务意义,仅用来与其它表建立关系,如果你确定一个表不与其它任何表建立关系的话,该字段就完全不需要了。但关系数据库中有表不需要与其它表发生关系吗?那就不是关系数据库了!
在多表操作时,SQL Server也不会有问题。在跨事务的取值有IDENT_CURRENT方法。在同一事务对多表关联操作有受触发影响的@@Identity变量和不受触发影响的SCOPE_IDENTITY方法。所以SQL Server在实现多表关联特别的有主从表关系的Identity值的时候是不会有什么问题的。