日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

oracle 实现 自增主键功能

發布時間:2025/3/17 编程问答 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 oracle 实现 自增主键功能 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

轉自:https://blog.csdn.net/zxh2075/article/details/78488141

之前有一項工作是將mysql的數據庫實現轉移到oracle,遇到了自增主鍵實現的問題。 首先介紹一下MySQL和Oracle的背景知識 1)MySQL建表時必須有一個主鍵(PRIMARY KEY), 每條主鍵內容必須唯一(Unique), 所以經常使用一個”ID”字段作為主鍵,給它一個”auto_increment”屬性,讓”ID”字段每條記錄都自增”1″。 比如下表: 1 CREATE TABLE Demo 2 ( 3 id INT NOT NULL auto_increment PRIMARY KEY, 4 key1 VARCHAR2(40) NULL, 5 key2 VARCHAR2(40) NULL 6 ); id是自增主鍵。

?

insert 的時候,用不著理會自增主鍵的value,插入新項時會自動給id賦值,插入新紀錄時用不著考慮自增主鍵。 1 insert into Demo(key1, key2) 2 value("k1","k2") ? 如果是第一條紀錄,插入的數據項為

?

id????|????key1????|????key2

?

1?????|????k1 ? ? ? ?|????k2

?

2)Oracle沒有這個”auto_increment”屬性,所以它沒法像MySQL般在表內定義自增主鍵。 但是,Oracle里的序列(SEQUENCE),可間接實現自增主鍵的作用。 序列(Sequence),又叫序列生成器,用于提供一系列的數字,開發人員使用序列生成唯一鍵。每次訪問序列,序列按照一定的規律增加或者減少。 序列的定義存儲在SYSTEM表空間中,序列不像表,它不會占用磁盤空間。 序列獨立于事務,每次事務的提交和回滾都不會影響序列。 創建的方法及參數說明如下,想了解更多,可以具體查一下oracle database sequence的說明: 1 CREATE SEQUENCE SEQNAME //序列名字 2 INCREMENT BY 1 //每次自增1, 也可寫非0的任何整數,表示自增,或自減 3 START WITH 1 //以該值開始自增或自減 4 MAXVALUE 1.0E20 //最大值;設置NOMAXVALUE表示無最大值 5 MINVALUE 1 //最小值;設置NOMINVALUE表示無最大值 6 CYCLE or NOCYCLE //設置到最大值后是否循環; 7 CACHE 20 //指定可以緩存 20 個值在內存里;如果設置不緩存序列,則寫NOCACHE 8 ORDER or NOORDER //設置是否按照請求的順序產生序列 oracle實現自增主鍵,如上例,其表的創建語句如下: 1 CREATE TABLE Demo 2 ( 3 id INT NOT NULL PRIMARY KEY, 4 key1 VARCHAR2(40) NULL, 5 key2 VARCHAR2(40) NULL 6 ); 沒有auto_increment屬性了。 插入時實現自增主鍵,先創建序列: 1 CREATE SEQUENCE SEQ 2 INCREMENT BY 1 3 START WITH 1 4 MAXVALUE 1.0E20 5 MINVALUE 1 6 NOCYCLE 7 CACHE 20 8 NOORDER 插入時: 1 insert into Demo(id, key1, key2) ?2 value(SEQ.NEXTVAL,"k1","k2") ? 然而,上述方法不適用于insert的另一種使用方式;即 1 insert into table(key1, key2) select k1, k2 from anotherTable; ? 所以真正設計時,應該用觸發器保證自增主鍵的實現,如下過程: 下面用一個例子來說明自增主鍵的創建: ? 1、建用戶數據表?? 1 drop table dectuser; 2 create table dectuser( 3 userid integer primary key, /*主鍵*/ 4 name varchar2(20), 5 sex varchar2(2) 6 ); 2、創建自動增長序列 ? 1 drop sequence dectuser_tb_seq; 2 create sequence dectuser_tb_seq minvalue 1 maxvalue 99999999 3 increment by 1 4 start with 1; /*步長為1*/ 3、創建觸發器 ? 1 create or replace trigger dectuser_tb_tri 2 before insert on dectuser /*觸發條件:當向表dectuser執行插入操作時觸發此觸發器*/ 3 for each row /*對每一行都檢測是否觸發*/ 4 begin /*觸發器開始*/ 5 select dectuser_tb_seq.nextval into :new.userid from dual; 6 /*觸發器主題內容,即觸發后執行的動作,在此是取得序列dectuser_tb_seq的下一個值插入到表dectuser中的userid字段中*/ 7 end; 8 / 4、提交 ? 現在就完成了自增主鍵的設定,搞定!可以檢測一下。?? 1 insert into dectuser(name,sex) values ('feng','男); 2 commit; /*提交*/ 提示“已創建一行”,表示成功。 ? ? 上述示例的代碼,是直接引用他人的文章內容;原貼在http://shanxmxj.javaeye.com/blog/948739 自己試過此方法,但對select into感覺還是有些地方理解得不好。

轉載于:https://www.cnblogs.com/sharpest/p/10160370.html

總結

以上是生活随笔為你收集整理的oracle 实现 自增主键功能的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。