1. 關於ORACLE資料庫自增的問題
這樣的需求感覺只能通過應用程序來實現。但是逐個檢查ID,然後找到間隔的,這個開銷比較大,不知道要達到什麼目的。
我這有兩個解決方案:
1、如果ID是為了顯示序號,可以在查詢的時候使用ROWNUM來實現
2、增加一個FLAG刪除標志,刪除的時候對FLAG打標記,這樣ID就始終是連續的
2. oracle資料庫怎麼設置自動增長
oracle的自動增長是藉助序列來實現。
創建序列:
sql">CREATESEQUENCEemp_sequence--序列名
INCREMENTBY1--每次加幾個
STARTWITH1--從1開始計數
NOMAXVALUE--不設置最大值
NOCYCLE--一直累加,不循環
CACHE10;
使用的時候,用emp_sequence.nextval()就行
3. oracle資料庫自動增長列
有了insert_stu 這個triger後不管你在insert時對stuid欄位寫入什麼值都會自動被seq_id.nextval覆蓋掉,所以並不是必須指定insert into stu values(seq_id.nextval,...);你insert into stu values(1111,...);是一樣的效果。
4. oracle怎麼把主鍵設置自動增長
第一種,通過序列以及觸發器實現主鍵自增長。
這種方式適用於直接使用JDBC連接資料庫。這種方式將主鍵自增長的任務完全交給資料庫,我們無需在代碼層面上進行任何控制。
第二種,通過序列以及Hibernate配置實現自增長。
這種方式適用於通過Hibernate連接資料庫的方式。這種方式在資料庫上創建序列,通過配置在POJO類上的注釋,讓Hibernate去調用資料庫的序列實現自增長。
這兩種方式都是通過Oracle的序列實現自增長,但第一種通過資料庫的觸發器在插入的時候自動插入主鍵。而後者則由Hibernate自動完成獲取主鍵,插入主鍵這一操作。
5. oracle資料庫空間什麼時間自增
以目前三大主流資料庫oracle,mysql,sqlserver分別說明。
如果是oracle,需要用to_date函數將字元型數據轉換,插入到資料庫的日期型數據中。
如:
1
2
3
4
5
create table test
(cdate date);
insert into test values (to_date('2015-08-13','yyyy-mm-dd'));
commit;
如果是mysql或者sqlserver,可直接以字元形式插入,資料庫會自動將字元轉成日期。
1
2
3
4
create table test
(cdate datetime);
insert into test values ('2015-08-13');
需要注意:oracle中插入後需要commit(提交),否則在關閉當前會話後,插入是不成功的
6. oracle資料庫中數據表主鍵自動增長
3:創建觸發器,創建一個觸發器,當所設置
欄位
數據變化時觸發相關事件
create
or
replace
trigger
trg_seq_pid
BEFORE
insert
ON
mobilePhone
FOR
EACH
ROW
begin
select
seq_pid
.nextval
into:New.pid
from
al;
end
trg_seq_pid
;
該觸發器
含義
為當往表mobilePhone
中插入數據時userid欄位的值從序列
seq_pid
中取數插入。
7. oracle資料庫中怎樣給表創建自動增長列
1、在oracle中沒有想sqlserver自動增長列,如果想要達到這個效果必須要自己建立索引
2、建立索性,可以為你這個需要自動增長的表建立觸發器,觸發器自動幫你完成自動增長工作
3、第二種方法:建立索性,插入的時候自動獲取索引的下一個值
8. 如何設置oracle資料庫自增欄位
這里Oracle資料庫使用命令行操作,注意Oracle不能直接設置自增欄位,需要使用序列+觸發器來實現。
1.創建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.創建自增序列
create sequence BOOK_seq (BOOK_seq為序列名,任意取)
increment by 1 (increment 表示欄位逐條增加1)
start with 1 (設置自增序列的初始值為1)
nomaxvalue (不限制自增序列的最大值)
minvalue 1; (設置自增序列的最小值為1)
3.試用一下,向BOOK表中插入一條數據,Id列就引用了自增序列。
insert into BOOK values(BOOK_seq.nextval,'a','a','a','a',32.1,'a',
'a','1.jpg');
注意:
操作之後記得輸入「commit;「保存操作。
Oracle資料庫的的命令行創建表,系統會自動轉化為大寫字母,假如使用資料庫操作客戶端,那麼建表等操作時記得欄位名大寫。
9. 怎麼讓oracle資料庫的主鍵自增
建立一個序列啊,每次從序列中取值,提醒一下插入值的時候不要插入主鍵,用一個觸發器自動插入主鍵的值,給你我的一個案例
CREATE OR REPLACE TRIGGER CRC_028_INOUT_SUMMARY_T(觸發器名)
BEFORE INSERT ON CRC_028_INOUT_SUMMARY(表名稱)
FOR EACH ROW
DECLARE
L_SUMMARY_ID NUMBER := 0;
BEGIN
-- CRC_028_INOUT_SUMMARY_S 是序列名
SELECT CRC_028_INOUT_SUMMARY_S.NEXTVAL INTO L_SUMMARY_ID FROM DUAL;
:NEW.SUMMARY_ID := L_SUMMARY_ID;
END;
好好看看,可以參考我的博客:http://blog.csdn.net/u013101979/article/details/64540630
Oracle序列的概念:
序列是一資料庫對象,利用它可生成唯一的整數。一般使用序列自動地生成主碼值(類似於MySQL中的主鍵auto_increment屬性)
有時候我們定義某張表其中某一列為主鍵,當我們往標中插入數據的時候,對於主鍵欄位的賦值要求唯一性,我們希望能有個自增類型的資料庫對象,我們每獲取一次它就自動增長,保證下次獲取的時候肯定是不一樣的值,序列既是這種Oracle對象。
create sequence sequence_name [increment by n1, start with n2 ,maxvalue n3, cache n , nocache .....]
從序列取值:sequence_name.CURRVAL(取當前值) sequence_name.NEXTVAL(取下一條值)
更改序列的定義: alter sequence_name sequence definition;
屬性cache的指定:
如果指定CACHE值,Oracle就可以預先在內存裡面放置一些Sequence,這樣存取的快些。
cache裡面的取完後,Oracle自動再取一組到cache。使用cache或許會跳號, 比如資料庫突然不正常down掉(shutdown abort)
cache中的Sequence就會丟失。
舉個例子:比如你的sequence中cache 100,那當你sequence取到90時突然斷電,那麼在你重啟資料庫後,sequence的值將從101開始。
如果指定NOCACHE值,Oracle就不會預先在內存裡面存放Sequence,當然這也就可以避免資料庫不正常down掉的sequence丟失。
不過會產生一些問題:創建nocache sequence在高並發訪問時,容易導致row cache lock等待事件
主要原因是每次獲取nextval時都需要修改rowcache中的字典信息。使用nocache sequence,還會導致如下問題:
由於每次修改字典信息都需要commit,可能導致log file sync等待,nocache sequence在RAC環境下
會對基於sequence生成的列創建的索引造成實例間大量索引塊爭用。基於以上問題,避免創建nocache sequence。
創建序列的語法,序列是和表一樣的對象要指定它的用戶
CREATE SEQUENCE sequence
[INCREMENT BY n] -- 自增的公差,默認為1
[START WITH n] -- 起始值
[{MAXVALUE n | NOMAXVALUE}] -- 最大值
[{MINVALUE n | NOMINVALUE}] -- 最小值
[{CYCLE | NOCYCLE}] -- 循環
[{CACHE n | NOCACHE}]; -- 緩存
從序列取值: CURRVAL 取當前值, NEXTVAL取下一個值
更改序列的定義:
ALTER SEQUENCE dept_deptid_seq
INCREMENT BY 20
MAXVALUE 999999
NOCACHE NOCYCLE;
10. oracle資料庫中ID怎麼自增長,怎麼設置啊
oracle 中不能設置自動增加,這個和其他資料庫不一樣,但是有 序列,這個是Oracle自己特有的東西,
首先創建序列:
create sequence seq;
這就創建好了,然後 seq.nextval 就會返回一個值,不會重復的值,
insert into tablename values(seq.nextval,'001','javabook');
insert into tablename values(seq.nextval,'001','javabook');
insert into tablename values(seq.nextval,'001','javabook');
看明白沒?這樣前3個id 分別是 1,2,3