关于主键:在建表时指定primary key字句即可:
create table test(
id number(6) primary key,
name varchar2(30)
)
如果是对于已经建好的表,想增加主键约束,则类似语法:
alter table test add constraint pk_id primary key(id)
其中add constraint 和 primary key是关键字,pk_id是主键名称,自定义的额,只要不重复即可。
也可以自动一些,对表的插入 *** 作,建立一个触发器,每当有数据插入时,触发器自动修改id值为序列的新值,这样就完全实现自增id功能了。不过其实也没有这个必要。因为触发器如果建多了,有时会比较混乱,不易管理。
oracle中没有自动增长,只有序列号\x0d\x0a添加一条记录和sqlserver一样\x0d\x0a语法:insert into table(列,列,列) values(value,value,value)\x0d\x0a\x0d\x0a如果有个自动增长列\x0d\x0a可以用这种方法,首先创建一个序列号SEQ_Test\x0d\x0a然后insert into table(ID,列,列) values(SEQ_Test.nextval,value,value)触发器(trigger)或者序列(sequence)来实现。1、序列(sequence)create sequence Sequence_nameincrement by 1 --表示从1开始计值start with 1--每次增长1nomaxvalue / maxvalue 999999--有两个可选值,要么无最大值,要么指定最大值;minvalue 1 / nominvaluecycle--表示达到最大值后从头开始,也可以为nocycle;cache 10--指定cache的值。如果指定CACHE值,oracle就可以预先在内存里面放置一些sequence,这样存取的快些。cache里面的取完后,oracle自动再取一组到cache。使用cache或许会跳号,比如数据库突然不正常down掉(shutdownabort),cache中的sequence就会丢失. 所以可以在createsequence的时候用nocache防止这种情况。order--指定排序序列提供两个方法,NextVal和CurrVal。顾名思义,NextVal为取序列的下一个值,一次NEXTVAL会增加一次sequence的值;CurrVal为取序列的当前值。例如,插入记录时:insert tablename(id)values(sequence_id.nextval)--sequence_id为序列名但是要注意的是:第一次NEXTVAL返回的是初始值;随后的NEXTVAL会自动增加你定义的INCREMENTBY值,然后返回增加后的值。CURRVAL总是返回当前sequence的值,但是在第一次NEXTVAL初始化之后才能使用CURRVAL,否则会出错。2、触发器(trigger)create or replace triggertrigger_namebefore insert on your_sid.tablenamefor each rowbegindeclarei numbercursor cur is select max(id) from your_sid.tablenameBEGINopen curFETCH cur INTO iif i is NULL then:new.id := 0//可以根据实际需要来定初始值else:new.id := i + 1//这里以1递增end ifClose curENDEND/其中:your_sid为数据库的当前用户SID,tablename为表名,id为列名欢迎分享,转载请注明来源:内存溢出
评论列表(0条)