首先,Oracle中沒有像MySQL那樣的id自增長功能
創(chuàng)新互聯(lián)于2013年開始,是專業(yè)互聯(lián)網(wǎng)技術(shù)服務公司,擁有項目成都網(wǎng)站制作、成都網(wǎng)站設計網(wǎng)站策劃,項目實施與項目整合能力。我們以讓每一個夢想脫穎而出為使命,1280元樺川做網(wǎng)站,已為上家服務,為樺川各地企業(yè)和個人服務,聯(lián)系電話:028-86922220
如果要用Oracle這么做的話首先要先建一個表,如:
CREATE
TABLE
test(
ID
Number(4)
NOT
NULL
PRIMARY
KEY,
NAME
VARCHAR(25),
PHONE
VARCHAR(10),
ADDRESS
VARCHAR(50));
然后,你需要一個自定義的sequence:
CREATE
SEQUENCE
emp_sequence
INCREMENT
BY
1
--
每次加幾個
START
WITH
1
--
從1開始計數(shù)
NOMAXVALUE
--
不設置最大值
NOCYCLE
--
一直累加,不循環(huán)
NOCACHE
--
不建緩沖區(qū)
你只有了表和序列還不夠,還需要一個觸發(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;
這時你再向test表中插數(shù)據(jù)就可以不用管id了
用觸發(fā)器trigger的功能來實現(xiàn)它: 1、首先建立一個創(chuàng)建自增字段的存儲過程create or replace procedure pro_create_seq_col
(tablename varchar2,columnname varchar2)
as
strsql varchar2(1000);
begin
strsql := 'create sequence seq_'||tablename||' minvalue 1 maxvalue 999999999999999999 start with 1 increment by 1 nocache';
execute immediate strsql;
strsql := 'create or replace trigger trg_'||tablename||' before insert on '||tablename||' for each row begin select seq_'||tablename||'.nextval into :new.'||columnname||' from dual; end;';
execute immediate strsql;
end;
/
2、Oracle中執(zhí)行動態(tài)SQL時要顯示授權(quán)(即使該用戶擁有該相關(guān)權(quán)限)GRANT CREATE ANY SEQUENCE TO UserName;
GRANT CREATE ANY TRIGGER TO UserName;
3、重新Compile存儲過程pro_create_seq_col; 4、搞定,下面我們就可以用這個存儲過程建立自增自段了。 5、調(diào)用存儲過程建立自增字段(提示: 第一個參數(shù)是表名,第二個參數(shù)為自增字段的名字)exec pro_create_seq_col('sb_zsxx','zsxh');
exec pro_create_seq_col('sb_sbxx','sbxh');
exec pro_create_seq_col('sb_jkx','pzxh');
exec pro_create_seq_col('sdspfp','sysfpid');
這里Oracle數(shù)據(jù)庫使用命令行操作,注意Oracle不能直接設置自增字段,需要使用序列+觸發(fā)器來實現(xiàn)。
1.創(chuàng)建Book表
Create table Book(
Id NUMBER(6) constraint s_PK primary key,
Title nvarchar2(200) not null,
Author nvarchar2(200) not null,
Publisher nvarchar2(200) not null,
ISBN nvarchar2(50) not null,
Price NUMBER(6,2) not null,
CategoryName nvarchar2(50) not null,
Description nvarchar2(1000) not null,
ImageName varchar2(50)
);
2.創(chuàng)建自增序列
create sequence BOOK_seq (BOOK_seq為序列名,任意?。?/p>
increment by 1 (increment 表示字段逐條增加1)
start with 1 (設置自增序列的初始值為1)
nomaxvalue (不限制自增序列的最大值)
minvalue 1; (設置自增序列的最小值為1)
3.試用一下,向BOOK表中插入一條數(shù)據(jù),Id列就引用了自增序列。
insert into BOOK values(BOOK_seq.nextval,'a','a','a','a',32.1,'a',
'a','1.jpg');
注意:
操作之后記得輸入“commit;“保存操作。
Oracle數(shù)據(jù)庫的的命令行創(chuàng)建表,系統(tǒng)會自動轉(zhuǎn)化為大寫字母,假如使用數(shù)據(jù)庫操作客戶端,那么建表等操作時記得字段名大寫。
oracle:
oracle沒有自增長序列,因此可以用以下方法來實現(xiàn)
1.建立表格:
createtabletable1
(
cidnumber(8)notnull,
othersvarchar2(20)
);
2.建立從1開始的序列:
createsequenceemp_sequence
incrementby1--每次加幾個
startwith1--從1開始計數(shù)
nomaxvalue--不設置最大值
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);
-----oracle 指定字段 自增 ,1.要先創(chuàng)建一個序列 2. 之后創(chuàng)建一個觸發(fā)器
--- 序列 (序列與觸發(fā)器實現(xiàn)t_sys_organize表中F_ID字段的自動增長)
create sequence t_sys_organize_F_ID_SEQUENCE
minvalue 100000
maxvalue 99999999
start with 100000
increment by 1
nocache;
--觸發(fā)器 (序列與觸發(fā)器實現(xiàn)t_sys_organize表中F_ID字段的自動增長)
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;