如何在Oracle上使用自动增量创建id?

如何在Oracle上使用自动增量创建id?

在Oracle中似乎没有自动增量的概念,直到并包括版本11g。

如何在Oracle 11g中创建行为类似自动增量的列?


哔哔one
浏览 1365回答 4
4回答

慕仙森

SYS_GUID返回一个GUID-一个全局唯一的ID。一个SYS_GUID是RAW(16)。它不生成递增的数值。如果要创建一个递增的数字键,则需要创建一个序列。CREATE&nbsp;SEQUENCE&nbsp;name_of_sequence&nbsp;&nbsp;START&nbsp;WITH&nbsp;1 &nbsp;&nbsp;INCREMENT&nbsp;BY&nbsp;1 &nbsp;&nbsp;CACHE&nbsp;100;然后,您可以在您的INSERT陈述INSERT&nbsp;INTO&nbsp;name_of_table(&nbsp;primary_key_column,&nbsp;<<other&nbsp;columns>>&nbsp;) &nbsp;&nbsp;VALUES(&nbsp;name_of_sequence.nextval,&nbsp;<<other&nbsp;values>>&nbsp;);或者,可以定义一个触发器,该触发器使用序列自动填充主键值。CREATE&nbsp;OR&nbsp;REPLACE&nbsp;TRIGGER&nbsp;trigger_name &nbsp;&nbsp;BEFORE&nbsp;INSERT&nbsp;ON&nbsp;table_name&nbsp;&nbsp;FOR&nbsp;EACH&nbsp;ROWBEGIN &nbsp;&nbsp;SELECT&nbsp;name_of_sequence.nextval&nbsp;&nbsp;&nbsp;&nbsp;INTO&nbsp;:new.primary_key_column&nbsp;&nbsp;&nbsp;&nbsp;FROM&nbsp;dual;END;如果使用的是Oracle 11.1或更高版本,则可以稍微简化触发器CREATE&nbsp;OR&nbsp;REPLACE&nbsp;TRIGGER&nbsp;trigger_name &nbsp;&nbsp;BEFORE&nbsp;INSERT&nbsp;ON&nbsp;table_name&nbsp;&nbsp;FOR&nbsp;EACH&nbsp;ROWBEGIN &nbsp;&nbsp;:new.primary_key_column&nbsp;:=&nbsp;name_of_sequence.nextval;END;如果你真的想用SYS_GUIDCREATE&nbsp;TABLE&nbsp;table_name&nbsp;( &nbsp;&nbsp;primary_key_column&nbsp;raw(16)&nbsp;default&nbsp;sys_guid()&nbsp;primary&nbsp;key, &nbsp;&nbsp;<<other&nbsp;columns>>)

噜噜哒

在甲骨文12c中,你可以这样做,CREATE&nbsp;TABLE&nbsp;MAPS( &nbsp;&nbsp;MAP_ID&nbsp;INTEGER&nbsp;GENERATED&nbsp;ALWAYS&nbsp;AS&nbsp;IDENTITY&nbsp;(START&nbsp;WITH&nbsp;1&nbsp;INCREMENT&nbsp;BY&nbsp;1)&nbsp;NOT&nbsp;NULL, &nbsp;&nbsp;MAP_NAME&nbsp;VARCHAR(24)&nbsp;NOT&nbsp;NULL, &nbsp;&nbsp;UNIQUE&nbsp;(MAP_ID,&nbsp;MAP_NAME));在甲骨文(前12C)。--&nbsp;create&nbsp;tableCREATE&nbsp;TABLE&nbsp;MAPS( &nbsp;&nbsp;MAP_ID&nbsp;INTEGER&nbsp;NOT&nbsp;NULL&nbsp;, &nbsp;&nbsp;MAP_NAME&nbsp;VARCHAR(24)&nbsp;NOT&nbsp;NULL, &nbsp;&nbsp;UNIQUE&nbsp;(MAP_ID,&nbsp;MAP_NAME));--&nbsp;create&nbsp;sequenceCREATE&nbsp;SEQUENCE&nbsp;MAPS_SEQ;--&nbsp;create&nbsp;tigger&nbsp;using&nbsp;the&nbsp;sequenceCREATE&nbsp;OR&nbsp;REPLACE&nbsp;TRIGGER&nbsp;MAPS_TRG&nbsp; BEFORE&nbsp;INSERT&nbsp;ON&nbsp;MAPS&nbsp; FOR&nbsp;EACH&nbsp;ROWWHEN&nbsp;(new.MAP_ID&nbsp;IS&nbsp;NULL)BEGIN &nbsp;&nbsp;SELECT&nbsp;MAPS_SEQ.NEXTVAL&nbsp;&nbsp;INTO&nbsp;&nbsp;&nbsp;:new.MAP_ID&nbsp;&nbsp;FROM&nbsp;&nbsp;&nbsp;dual;END;/

汪汪一只猫

这里有三种口味:数字。简单增加数值,例如1,2,3,.吉德。全局Univeral标识符,作为RAW数据类型。GUID(字符串)。和上面一样,但是作为一个字符串,在某些语言中可能更容易处理。x身份列。代用FOO在每个示例中使用您的表名。--&nbsp;numerical&nbsp;identity,&nbsp;e.g.&nbsp;1,2,3...create&nbsp;table&nbsp;FOO&nbsp;( &nbsp;&nbsp;&nbsp;&nbsp;x&nbsp;number&nbsp;primary&nbsp;key);create&nbsp;sequence&nbsp;&nbsp;FOO_seq;create&nbsp;or&nbsp;replace&nbsp;trigger&nbsp;FOO_trg before&nbsp;insert&nbsp;on&nbsp;FOOfor&nbsp;each&nbsp;rowbegin &nbsp;&nbsp;select&nbsp;FOO_seq.nextval&nbsp;into&nbsp;:new.x&nbsp;from&nbsp;dual;end;/--&nbsp;GUID&nbsp;identity,&nbsp;e.g.&nbsp;7CFF0C304187716EE040488AA1F9749A--&nbsp;use&nbsp;the&nbsp;commented&nbsp; &nbsp;&nbsp;out&nbsp;lines&nbsp;if&nbsp;you&nbsp;prefer&nbsp;RAW&nbsp;over&nbsp;VARCHAR2.create&nbsp;table&nbsp;FOO&nbsp;( &nbsp;&nbsp;&nbsp;&nbsp;x&nbsp;varchar(32)&nbsp;primary&nbsp;key&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;--&nbsp;string&nbsp;version &nbsp;&nbsp;&nbsp;&nbsp;--&nbsp;x&nbsp;raw(32)&nbsp;primary&nbsp;key&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;--&nbsp;raw&nbsp;version);create&nbsp;or&nbsp;replace&nbsp;trigger&nbsp;FOO_trg before&nbsp;insert&nbsp;on&nbsp;FOOfor&nbsp;each&nbsp;rowbegin &nbsp;&nbsp;select&nbsp;cast(sys_guid()&nbsp;as&nbsp;varchar2(32))&nbsp;into&nbsp;:new.x&nbsp;from&nbsp;dual;&nbsp;&nbsp;--&nbsp;string&nbsp;version &nbsp;&nbsp;--&nbsp;select&nbsp;sys_guid()&nbsp;into&nbsp;:new.x&nbsp;from&nbsp;dual;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;--&nbsp;raw&nbsp;versionend;/最新情况:Oracle 12c引入了这两个不依赖触发器的变体:create&nbsp;table&nbsp;mytable(id&nbsp;number&nbsp;default&nbsp;mysequence.nextval);create&nbsp;table&nbsp;mytable(id&nbsp;number&nbsp;generated&nbsp;as&nbsp;identity);第一种方法以传统方式使用序列;第二种方法在内部管理值。
打开App,查看更多内容
随时随地看视频慕课网APP