-----oracle 指定字段 自增 ,1.要先創(chuàng)建一個(gè)序列 2. 之后創(chuàng)建一個(gè)觸發(fā)器
公司主營業(yè)務(wù):做網(wǎng)站、網(wǎng)站設(shè)計(jì)、移動(dòng)網(wǎng)站開發(fā)等業(yè)務(wù)。幫助企業(yè)客戶真正實(shí)現(xiàn)互聯(lián)網(wǎng)宣傳,提高企業(yè)的競爭能力。創(chuàng)新互聯(lián)建站是一支青春激揚(yáng)、勤奮敬業(yè)、活力青春激揚(yáng)、勤奮敬業(yè)、活力澎湃、和諧高效的團(tuán)隊(duì)。公司秉承以“開放、自由、嚴(yán)謹(jǐn)、自律”為核心的企業(yè)文化,感謝他們對(duì)我們的高要求,感謝他們從不同領(lǐng)域給我們帶來的挑戰(zhàn),讓我們激情的團(tuán)隊(duì)有機(jī)會(huì)用頭腦與智慧不斷的給客戶帶來驚喜。創(chuàng)新互聯(lián)建站推出石景山免費(fèi)做網(wǎng)站回饋大家。
--- 序列 (序列與觸發(fā)器實(shí)現(xiàn)t_sys_organize表中F_ID字段的自動(dòng)增長)
create sequence t_sys_organize_F_ID_SEQUENCE
minvalue 100000
maxvalue 99999999
start with 100000
increment by 1
nocache;
--觸發(fā)器 (序列與觸發(fā)器實(shí)現(xiàn)t_sys_organize表中F_ID字段的自動(dòng)增長)
CREATE OR REPLACE TRIGGER t_sys_organize_F_ID_TRIGGER BEFORE INSERT ON t_sys_organize FOR EACH ROW WHEN(NEW.F_ID IS NULL)
BEGIN
SELECT t_sys_organize_F_ID_SEQUENCE.NEXTVAL INTO:NEW.F_ID FROM dual;
END;
一、主鍵id自增
oracle 中不能設(shè)置自動(dòng)增加,這個(gè)和其他數(shù)據(jù)庫不一樣,但是有 序列,這個(gè)是Oracle自己特有的東西,
1、首先創(chuàng)建序列:create sequence seq;
語法:
CREATE SEQUENCE 序列名
[INCREMENT BY n] --每次加幾
[START WITH n] --序列從幾開始
[{MAXVALUE/ MINVALUE n|NOMAXVALUE}] --小值、大值限制
比CREATE SEQUENCE seq start with 1 increment by 1; --建立了額從1開始每次加1序列
訪問序列時(shí)用 序列名稱.nextval語法
這就創(chuàng)建好了,然后 seq.nextval 就會(huì)返回一個(gè)值,不會(huì)重復(fù)的值,
insert into tablename values(seq.nextval,'test');
insert into tablename values(seq.nextval,'test');
insert into tablename values(seq.nextval,'test');
這樣前3個(gè)id 分別是 1,2,3
二、自動(dòng)生成UUID策略
import java.util.UUID;
Student s = new Student();
s.setId(UUID.randomUUID().toString());
以前用的mysql,是有自動(dòng)遞增這個(gè)屬性的,現(xiàn)在用的orlace,需要建序列來實(shí)現(xiàn)遞增,這里記錄一下:
一、先建一張表(PROJECT_LOGS)
二、表建好了,我們來建一下序列,我用的是sqldeveloper界面來建:
其實(shí)到了這里就實(shí)現(xiàn)了遞增,只是寫sql時(shí)要傳入id(SEQ_PROJECT_LOGS.Nextval);
三、創(chuàng)建觸發(fā)器:
首先,Oracle中沒有像MySQL那樣的id自增長功能
如果要用Oracle這么做的話首先要先建一個(gè)表,如:
CREATE
TABLE
test(
ID
Number(4)
NOT
NULL
PRIMARY
KEY,
NAME
VARCHAR(25),
PHONE
VARCHAR(10),
ADDRESS
VARCHAR(50));
然后,你需要一個(gè)自定義的sequence:
CREATE
SEQUENCE
emp_sequence
INCREMENT
BY
1
--
每次加幾個(gè)
START
WITH
1
--
從1開始計(jì)數(shù)
NOMAXVALUE
--
不設(shè)置最大值
NOCYCLE
--
一直累加,不循環(huán)
NOCACHE
--
不建緩沖區(qū)
你只有了表和序列還不夠,還需要一個(gè)觸發(fā)器來執(zhí)行它:
CREATE
TRIGGER
"觸發(fā)器名稱"
BEFORE
INSERT
ON
example
FOR
EACH
ROW
WHEN
(new.id
is
null)
begin
select
emp_sequence.nextval
into:
new.id
from
dual;
end;
這時(shí)你再向test表中插數(shù)據(jù)就可以不用管id了
oracle:
oracle沒有自增長序列,因此可以用以下方法來實(shí)現(xiàn)
1.建立表格:
createtabletable1
(
cidnumber(8)notnull,
othersvarchar2(20)
);
2.建立從1開始的序列:
createsequenceemp_sequence
incrementby1--每次加幾個(gè)
startwith1--從1開始計(jì)數(shù)
nomaxvalue--不設(shè)置最大值
nocycle--一直累加,不循環(huán)
nocache--不建緩沖區(qū)3.建立觸發(fā)器:
createorreplacetriggermytgr
beforeinsertontable1foreachrow
begin
selectmytgr.nextvalinto:new.cidfromdual;
end;
mysql:
createtabletbname(a_idunsignedintprimarykeyauto_incrementnotnull,
a_titlevarchar(32),
a_contenttext);