请问一个有关主键自增的问题!!!!!!

Ryoko 2003-10-15 08:34:52
oracle中可以让一个主键如id自增吗,就好像sqlserver中把字段标识为identity那样?如果不行,想达到同样的效果,应该怎么做?请指教!
...全文
22 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
Ryoko 2003-10-15
  • 打赏
  • 举报
回复
多谢
pengdali 2003-10-15
  • 打赏
  • 举报
回复
create sequence s_country_id increment by 1 start with 1 maxvalue 999999999;
/
执行后:

CREATE OR REPLACE TRIGGER 你的名
BEFORE INSERT ON 你的表
REFERENCING OLD AS old NEW AS new
FOR EACH ROW
BEGIN
SELECT s_country_id.NEXTVAL INTO :new.你的列名 FROM dual;
END T_A_MemberShipID;
/

OK
Ryoko 2003-10-15
  • 打赏
  • 举报
回复
yfjyz(dd) 的方法要自己插入吧?
我想让数据库在插入新记录时自己增加这个字段。。。
Ryoko 2003-10-15
  • 打赏
  • 举报
回复
创建trigger那一步不太明白。。。不好意思以前没用过oracle也没用过trigger,能说详细一点吗??
REFERENCING OLD AS old NEW AS new
中的old和new是什么,后面的new.列名和dual,end后面的T_A_MemberShipID?

还有最后在sqlplus中如何执行?
pengdali 2003-10-15
  • 打赏
  • 举报
回复
第一步:创建SEQUENCE
create sequence s_country_id increment by 1 start with 1 maxvalue 999999999;

第二步:创建一个基于该表的before insert 触发器,在触发器中使用该SEQUENCE
CREATE OR REPLACE TRIGGER 名
BEFORE INSERT ON 表
REFERENCING OLD AS old NEW AS new
FOR EACH ROW
BEGIN
SELECT s_country_id.NEXTVAL INTO :new.列名 FROM dual;
END T_A_MemberShipID;
yfjyz 2003-10-15
  • 打赏
  • 举报
回复
先创建一个sequence,通过序列来实现
如:create table aa ( a number not null ...);

create sequence seq_a start with 1 maxvalue 999999999;

update aa set a=seq_a.nextv_al;

17,377

社区成员

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

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