如何能建立一个列,使得插入数据后系统自动加入序号。

xiongga 2005-03-22 04:59:10
例如:
列名:id
name
插入数据:
insert into mytable (name) values("myname");
然后数据库自动为id赋一个不重复的值。

我想问的是建立这个表,id的类型应该是什么?
...全文
305 11 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
liqian008 2005-03-23
  • 打赏
  • 举报
回复
create trigger xxx before insert on "table_name" for each row

declare
newId nummber;
begin
select sequence.nextval() into newid from dual;
New.id:=newid;
end;/
xiongga 2005-03-23
  • 打赏
  • 举报
回复
多谢大家了
commanddos 2005-03-23
  • 打赏
  • 举报
回复
create sequence sq_id
minvalue 1 maxvalue 999999999999
start with 1
increment by 1
cache 20;
应该能看明白吧
可结合nextval(下一值))和currval(当前值)使用。
但是不保证sequence具有连续性,因为调用一次nextval,该序列就会自动加increment
lxhlizhenhao 2005-03-23
  • 打赏
  • 举报
回复
CREATE SEQUENCE LOCATIONS_SEQ
INCREMENT BY 100
START WITH 1
MAXVALUE 9900
MINVALUE 1
NOCYCLE
NOCACHE
NOORDER

则建立了一个系列,LOCATIONS_SEQ是系列名,NOCYCLE 表示序列在达到最小值或最大值后将不再生成其他值。NOCACHE 表示序列值在被请求之前不会进行分配;可使用预分配机制来改善性能。NOORDER 表示在生成编号时,不能保证按照请求编号的顺序返回这些编号。
luxuezhu 2005-03-23
  • 打赏
  • 举报
回复
为什么问这个的那么多,不搜索一下呢?
xiongga 2005-03-23
  • 打赏
  • 举报
回复
sequence怎么定义啊,?
给个例子吧
95277 2005-03-23
  • 打赏
  • 举报
回复
之前我给的代码是把序列建在触发器里。
在插入的时候
例如:insert into tablename (id,name) values(0,'name');
把插序列的地方写个0就可以了。免得每次插入是写xxx.nextval这句话太麻烦。
zealot_zk 2005-03-22
  • 打赏
  • 举报
回复
使用一个序列(sequence),它是一个类似sql server中id的对象,但是在使用时oracle不保证存储时sequence的连续性。
binkou 2005-03-22
  • 打赏
  • 举报
回复
做一个sequences(序列sq)定义它的初始值、最大值、增长值。插入语句如下:
insert into mytable (name,id) values("myname",sq.nextval);
95277 2005-03-22
  • 打赏
  • 举报
回复
可以做一个触发器。
当插入的时候会自动触发将ID加一。


create or replace trigger auto_increase_id
before insert on test
for each row
declare
next_id number;
begin
select seq_test.nextval
into next_id
from dual;
:new.id:=next_id;
end;
cyberhui 2005-03-22
  • 打赏
  • 举报
回复
oracle 本身系统就有这个功能,自动会在表最后加上一个20位的ROWID字段,varchar型的。每条记录的RowID都不一样

17,382

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 基础和管理
社区管理员
  • 基础和管理社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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