欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Oracle實(shí)現(xiàn)主鍵字段自增的四種方式

 更新時(shí)間:2023年03月13日 11:10:01   作者:睡竹  
眾所周知MySQL數(shù)據(jù)庫(kù)的主鍵自增設(shè)置非常簡(jiǎn)單,任何一個(gè)常用的可視化工具都支持,只要打一下勾就可以開(kāi)啟主鍵自增了,然而Oracle并沒(méi)有那么簡(jiǎn)單,這篇文章主要給大家介紹了關(guān)于Oracle實(shí)現(xiàn)主鍵字段自增的四種方式,需要的朋友可以參考下

Oracle實(shí)現(xiàn)主鍵自增有4種方式:

  • Identity Columns新特性自增(Oracle版本≥12c)
  • 創(chuàng)建自增序列,創(chuàng)建表時(shí),給主鍵字段默認(rèn)使用自增序列
  • 創(chuàng)建自增序列,使用觸發(fā)器使主鍵自增
  • 創(chuàng)建自增序列,插入語(yǔ)句(insert)時(shí),使用自增序列代替值

數(shù)據(jù)庫(kù)表名稱為:userinfo(不能使用user,user為Oracle關(guān)鍵字)

方式一:Identity Columns新特性自增

該種方式要求Oracle版本≥12c

在自增字段后使用以下2種語(yǔ)句的1種:

  • generated by default as IDENTITY
  • generated always as identity

建表語(yǔ)句:

CREATE TABLE userinfo (
	id number(11) generated by default as IDENTITY,--使用自增功能
	name varchar2(20) ,
  	age number(3)
)

 測(cè)試:

INSERT INTO USERINFO (name,age) VALUES('張三',18)

結(jié)果:

該種方式很簡(jiǎn)單,底層原理其實(shí)和下面3種方式相似,只是Oracle幫我們省去了多余的操作。

以下是剩余的3種方式,都用共同的特點(diǎn)(先創(chuàng)建自增序列): 

準(zhǔn)備工作:

必須先創(chuàng)建自增序列:

--設(shè)置自增序列,名稱為"seq_userinfo",名字任意命名
create sequence seq_userinfo
 increment by 1		--每次+1	
 start with 1		--從1開(kāi)始
 nomaxvalue			--不限最大值
 nominvalue			--不限最小值
 cache 20;			--設(shè)置取值緩存數(shù)為20

sequence各個(gè)參數(shù)詳解,可以參考這邊文章:

Oracle中sequence(序列)詳解

方式二:創(chuàng)建自增序列,創(chuàng)建表時(shí),給主鍵字段默認(rèn)使用自增序列

建表語(yǔ)句,設(shè)置自增字段默認(rèn)使用自增序列(推薦該方式):

--創(chuàng)建userinfo表
CREATE TABLE userinfo (
  id number(11)  DEFAULT seq_userinfo.nextval, --"seq_userinfo"為自增序列名稱
  name varchar2(20) ,
  age number(3)
);

測(cè)試:我使用的是DBeaver軟件:

如圖:

 注意:新增了一條數(shù)據(jù),點(diǎn)擊保存,該軟件并不會(huì)立刻自動(dòng)顯示生成的ID,我們需要關(guān)閉當(dāng)前頁(yè)簽,再打開(kāi)就可以看到自增的ID

如下:

方式三:創(chuàng)建自增序列,使用觸發(fā)器使主鍵自增

建表語(yǔ)句:

--創(chuàng)建userinfo表
CREATE TABLE userinfo (
  id number(11)      not null,
  name varchar2(20) ,
  age number(3)
);

創(chuàng)建觸發(fā)器(只需要注意注釋的位置):

--創(chuàng)建觸發(fā)器,名稱為"deptinfo_TRIGGER",名字任意命名
create or replace trigger userinfo_TRIGGER
before insert on userinfo	--"userinfo"為表名稱
for each row
begin
select seq_userinfo.nextval into :new.id from dual;	--1、"seq_userinfo"為自增序列名稱 2、這里的id是你需要自增的序列
end userinfo_TRIGGER;	--"userinfo_TRIGGER"為觸發(fā)器名稱

測(cè)試:跟方式1測(cè)試一樣,會(huì)存在不顯示ID問(wèn)題:

如圖:

重新打開(kāi)頁(yè)簽:

如下:

方式四:創(chuàng)建自增序列,插入語(yǔ)句(insert)時(shí),使用自增序列代替值

建表語(yǔ)句:

--創(chuàng)建userinfo表
CREATE TABLE userinfo (
  id number(11)      not null,
  name varchar2(20) ,
  age number(3)
);

在插入語(yǔ)句中,自增的字段(ID),使用自增序列去代替

如下:

INSERT INTO userinfo(id,name,age) VALUES(seq_userinfo.nextval,'睡竹',18);

注意:方式三與MySQL、微軟的SQL server的自增方式是一樣的!

運(yùn)行結(jié)果:

總結(jié):

 對(duì)后臺(tái)系統(tǒng)開(kāi)發(fā)來(lái)說(shuō):

方式1和方式2最方便

方式3還需要新加一個(gè)觸發(fā)器,不推薦

方式4類似于方式2,但是對(duì)Java程序而言,mybatis的xml需要顯式的指定觸發(fā)器,不夠友好

附上刪除觸發(fā)器和自增序列的語(yǔ)句:

--刪除自增序列,"seq_userinfo"為自增序列的名稱
drop sequence seq_userinfo
--刪除觸發(fā)器,"userinfo_TRIGGER"為觸發(fā)器名稱
drop trigger userinfo_TRIGGER

到此這篇關(guān)于Oracle實(shí)現(xiàn)主鍵字段自增的四種方式的文章就介紹到這了,更多相關(guān)Oracle主鍵字段自增內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評(píng)論