監(jiān)理公司管理系統(tǒng) | 工程企業(yè)管理系統(tǒng) | OA系統(tǒng) | ERP系統(tǒng) | 造價(jià)咨詢管理系統(tǒng) | 工程設(shè)計(jì)管理系統(tǒng) | 甲方項(xiàng)目管理系統(tǒng) | 簽約案例 | 客戶案例 | 在線試用
X 關(guān)閉

SYBASE & ORACLE自增主鍵

申請(qǐng)免費(fèi)試用、咨詢電話:400-8352-114

  SYBASE & ORACLE自增主鍵

  1、SYBASE:

  SQL語(yǔ)句:

  CREATE TABLE test( phoneid int IDENTITY NOT NULL PRIMARY KEY , phoneNum varchar(20) null )

  關(guān)鍵字IDENTITY一定要大寫,而且一定要放在int和not null之間,

  用dba設(shè)置的話比較方便,直接在建表的過(guò)程中把Identity Column的屬性勾上即可。

  2、ORACLE

  由于ORACLE設(shè)置主鍵是不會(huì)自動(dòng)增加的,所以必須用 序列 和 觸發(fā)器 來(lái)完成主鍵的遞增

  1建立數(shù)據(jù)表

  createtable Test_Increase( userid number(10) primarykey,/*建立主鍵*/ username varchar2(20) );

  2創(chuàng)建自動(dòng)增長(zhǎng)序列

  CREATE SEQUENCE TestIncrease_Sequence INCREMENT BY1-- 每次加幾個(gè) START WITH1-- 從1開(kāi)始計(jì)數(shù) NOMAXVALUE-- 不設(shè)置最大值 NOCYCLE-- 一直累加,不循環(huán) CACHE 10;

  3創(chuàng)建觸發(fā)器

  CREATETRIGGER Test_Increase BEFORE insertON Test_Increase FOR EACH ROW begin select TestIncrease_Sequence.nextval into:New.userid from dual; end;完成!------------------------------------------------------------------------------------------------------------DB2修改表中一列為自動(dòng)增長(zhǎng)主鍵的方法1 )當(dāng)想將表中一列修改為自動(dòng)增長(zhǎng)時(shí),可用下面命令: Alter table <table name> alter column <column name> set generated always as identity (start with 1,increment by 1) 上面命令是在改一表中列的屬性時(shí),在網(wǎng)上找到的很有用。 2)當(dāng)修改表中一列自動(dòng)增長(zhǎng)的開(kāi)始值時(shí),可用下面的命令: ALTER TABLE <talbe_name> ALTER COLUMN <column name> RESTART WITH 18; DB2可以使用generated always as identity 將某一個(gè)字段指定為自增長(zhǎng)的字段, 比如: 這表示id自動(dòng)是一個(gè)自增長(zhǎng)的字段,它從1開(kāi)始增加每次增加1。也可以通過(guò)generated 將字段的值通過(guò)其他字段的計(jì)算的來(lái),比如; createtableuser(namevarchar(30), n1integer, n2 integer, idintegergeneratedalwaysas(n1+n2)) 如: createtablestrategy ( strategy_iddecimal(17) GENERATEDALWAYSASIDENTITY(STARTWITH1,INCREMENTBY1) primarykeynotnull, strategy_namevarchar(200), area_code decimal(6,0) ); GENERATEDALWAYSASIDENTITY(STARTWITH1, INCREMENTBY1) 從1開(kāi)始自增,每次加1. DB2Identity字段與sequence: Identity字段與sequence的最大不同在于: identity只能在一個(gè)表中使用,多個(gè)表不可以共享identity;而sequence可以通過(guò)命名方式在同一個(gè)數(shù)據(jù)庫(kù)內(nèi)部的多個(gè)表中共享序列號(hào)發(fā)生器 生成數(shù)字序列的兩種方法 在 DB2 中可以用兩種方法自動(dòng)生成一個(gè)數(shù)字序列: 定義帶有 IDENTITY 屬性的列。 創(chuàng)建 SEQUENCE 對(duì)象。 IDENTITY 列 當(dāng)用 IDENTITY 屬性定義表的列時(shí),每當(dāng)將一行插入表時(shí),就會(huì)自動(dòng)為該列生成一個(gè)數(shù)值。 SEQUENCE 對(duì)象 讓 DB2 自動(dòng)生成數(shù)字序列的第二種方法是創(chuàng)建 SEQUENCE 對(duì)象??梢允褂?序列表達(dá)式(sequence expression)來(lái)引用序列對(duì)象。序列表達(dá)式可以出現(xiàn)在表達(dá)式能夠出現(xiàn)的大多數(shù)位置。序列表達(dá)式可以指定要返回的值是新生成的值還是以前生成的值。 如果序列引用是針對(duì) 下一值(next value),就會(huì)為序列自動(dòng)生成一個(gè)數(shù)值,并將該數(shù)值作為序列表達(dá)式的結(jié)果返回。例如,如果我們假設(shè)已經(jīng)創(chuàng)建了名為 orders_seq 的序列,該序列表達(dá)式就返回為序列生成的下一個(gè)值: NEXTVALUEFORorders_seq 如果序列引用是針對(duì) 前一值(previous value),那么會(huì)將前一個(gè) SQL 語(yǔ)句中為序列生成的數(shù)值作為序列表達(dá)式的結(jié)果返回。該序列表達(dá)式返回由序列生成的前一個(gè)值: PREVIOUSVALUEFORorders_seq 注:當(dāng) DB2 UDB 引入序列時(shí),曾支持非 SQL 標(biāo)準(zhǔn)語(yǔ)法 NEXTVAL 代替 NEXT VALUE ,以及 PREVVAL 代替 PREVIOUS VALUE 。這些變體繼續(xù)受到支持。 在標(biāo)識(shí)和序列之間做出選擇 雖然標(biāo)識(shí)和序列都用于生成數(shù)值,但您也許要根據(jù)特殊情況選擇使用一種來(lái)代替另一種。 在以下情況下,標(biāo)識(shí)列很有用: 表中只有一列需要自動(dòng)生成的值 每一行都需要獨(dú)立的值 用自動(dòng)生成器來(lái)產(chǎn)生表的主鍵 生成新值的進(jìn)程與對(duì)表的插入操作緊密聯(lián)系,無(wú)論插入操作是如何發(fā)生的 在以下情況下,序列對(duì)象很有用: 要將從一個(gè)序列生成的值存儲(chǔ)到多個(gè)表中 每個(gè)表有多個(gè)列需要自動(dòng)生成的值(可能通過(guò)使用同一個(gè)序列或多個(gè)序列為每一行生成多個(gè)值) 生成新值的進(jìn)程與任何對(duì)表的引用無(wú)關(guān) 與序列對(duì)象不同,標(biāo)識(shí)列是在表上定義的,因此需要某些限制。每個(gè)表最多只能有一個(gè)標(biāo)識(shí)列。當(dāng)創(chuàng)建一個(gè)列作為標(biāo)識(shí)列時(shí),對(duì)于該列必須使用確切的數(shù)字?jǐn)?shù)據(jù)類型。因?yàn)闃?biāo)識(shí)屬性為列生成一個(gè)值,這類似于 DEFAULT 子句所做的,所以在定義標(biāo)識(shí)列時(shí)不能指定 DEFAULT 子句。標(biāo)識(shí)列被隱式地定義成 NOT NULL

發(fā)布:2007-04-07 16:32    編輯:泛普軟件 · xiaona    [打印此頁(yè)]    [關(guān)閉]
相關(guān)文章:

泛普微信營(yíng)銷軟件其他應(yīng)用

微營(yíng)銷 微信推廣 微信營(yíng)銷軟件 微信二維碼 微信商城 微信支付 微信開(kāi)店 微信公眾平臺(tái) 微信公眾號(hào) 微信公眾平臺(tái)登錄 微信怎么玩 微信認(rèn)證 下載微信到手機(jī) 手機(jī)微信 微信官網(wǎng) 微信網(wǎng)頁(yè)版 電腦微信 微信電腦版 微信公眾平臺(tái)注冊(cè) 微信注冊(cè) 微信公眾號(hào)申請(qǐng)