Oracle中自增字段的两种方法的比较(Trigger和Sequence)
2005-09-23 20:36
417 查看
在ORACLE中,没有象MS-SQLSERVER中那样子有自增字段,但是如果我们要实现这个功能,有2种方法
1 Trigger
sql语句如下:
create or replace trigger trigger_name
before insert on your_sid.tablename
for each row
begin
declare
i number;
cursor cur is select max(id) from your_sid.tablename;
BEGIN
open cur;
FETCH cur INTO i;
if i is NULL then
:new.id := 0; //可以根据实际需要来定初始值
else
:new.id := i + 1; //这里以1递增
end if;
Close cur;
END;
END;
/
其中:your_sid为数据库的当前用户SID,tablename为表名,id为列名,
2 Sequence
sql语句如下:
create sequence your_sid.sequence_name
increment by 1 //指定序列以1递增,如果没指定,默认值1会使用
start with 1 //由1开始计数
nomaxvalue //不设置最大值
minvalue 1 //设置最小值1
cache 20 //预分配缓存大小为20
order
二者的区别在于,Sequence的效率要比Trigger的高,因为Trigger每次都要遍历表中所有记录以寻找ID最大值,而Sequence每次执行后,都会保留最大值;
1 Trigger
sql语句如下:
create or replace trigger trigger_name
before insert on your_sid.tablename
for each row
begin
declare
i number;
cursor cur is select max(id) from your_sid.tablename;
BEGIN
open cur;
FETCH cur INTO i;
if i is NULL then
:new.id := 0; //可以根据实际需要来定初始值
else
:new.id := i + 1; //这里以1递增
end if;
Close cur;
END;
END;
/
其中:your_sid为数据库的当前用户SID,tablename为表名,id为列名,
2 Sequence
sql语句如下:
create sequence your_sid.sequence_name
increment by 1 //指定序列以1递增,如果没指定,默认值1会使用
start with 1 //由1开始计数
nomaxvalue //不设置最大值
minvalue 1 //设置最小值1
cache 20 //预分配缓存大小为20
order
二者的区别在于,Sequence的效率要比Trigger的高,因为Trigger每次都要遍历表中所有记录以寻找ID最大值,而Sequence每次执行后,都会保留最大值;
相关文章推荐
- 关于Oracle的exp和dblink转移数据效率比较以及DBLINK查询大字段方法
- Oracle中spool命令实现的两种方法比较
- Oracle Spool的用法小结以及两种方法的比较----------导出记录到文本 分享
- Oracle中spool命令实现的两种方法比较
- MySQL模拟Oracle的Sequence两种方法
- Java中读取Oracle中Clob字段的两种方法
- Oracle Spool的用法小结以及两种方法的比较----------导出记录到文本
- Oracle中spool命令实现的两种方法比较
- Oracle 修改字段顺序的两种方法
- 在ORACLE中创建自增字段(sequence)的方法
- Oracle导出Excel,两种方法比较
- Oracle中spool命令实现的两种方法比较
- MySQL模拟Oracle的Sequence两种方法
- Oracle中spool命令实现的两种方法比较
- Oracle中创建自增字段(序列sequence)方法
- oracle 不同字段且不同条记录比较值
- oracle 日期范围搜索的两种方法
- oracle处理已有数据的字段(主键)类型修改方法
- C#实体对象序列化成Json并让字段的首字母小写的两种解决方法
- Oracle修改字段类型方法总结