Oracle による自己増加主キーの作成方法
Oracle の主キーは通常、UUID に分割されます。 と 自己増加型 int の 2 種類があります。それぞれの長所と短所について簡単に説明します。 #1. UUID は、sys_guid() または Java の uuid を使用して簡単に作成できます。
2. バッチ データの挿入および更新操作に適しています。 3. クロスサーバーのデータ結合は非常に便利です。
INT 自己増加の利点1. 占有スペースが小さい
2. 優れたパフォーマンス、UUID は int と同じレベルにありません3. 覚えやすい
それぞれの利点はお互いの欠点です
推奨「
mysql ビデオ チュートリアル」
適用範囲:通常、分散環境では主キーとして UUID のみを使用しますが、他のプロジェクトでは主キーとして int を使用することを強くお勧めします。
PS: 最近、私の分散プロジェクトの 1 つでも、週末のアクセスのピーク時に UUID の重複が発生したため、グローバルに一意な ID としての UUID の利点を書き留めませんでしたが、Zookeeper をプライマリとして使用できます。演算子は、int 型の一意の主キーを作成しますが、これはまったく問題ありません。 つまり、すべての主キーには int 型を使用することをお勧めします。int 型の利点は、数千万のデータになると特に顕著になります。
Oracle による自己増加シーケンスの作成手順:自己増加シーケンスの作成
-- 创建自增长序列 create sequence seq_on_chance_contract increment by 1 -- 每次加1 start with 1 -- 从1开始计数 nomaxvalue -- 不设置最大值 nocycle -- 一直累加 nocache;
データ テーブルの作成
主キーには INTEGER と NUMBER を使用できます。システムが ORM フレームワークとして Hibernate を使用している場合、NUMBERcreate table TBL_CHANCE_CONTRACT ( ID INTEGER PRIMARY KEY, CHANCE_SUCCESS_ID VARCHAR2(50) not null, CONTENT CLOB, CREATE_USER_ID VARCHAR2(50), CREATA_USER_NAME VARCHAR2(80), CREATE_DATE TIMESTAMP(6) )を使用することはお勧めできません。ID の主キーを管理する必要がないように、主キー トリガーを作成します。新しいレコードを追加するとき
-- 创建主键触发器 CREATE OR REPLACE TRIGGER tg_on_id_chance_contract BEFORE INSERT ON TBL_CHANCE_CONTRACT FOR EACH ROW WHEN (new.ID is null) BEGIN SELECT seq_on_chance_contract.nextval into:new.ID from dual; END;
-- 查找所有SEQUENCE、TABLE select * from user_objects ubs; -- 查找所有SEQUENCE select * from user_objects ubs where ubs.OBJECT_TYPE='SEQUENCE';現在のシーケンス番号を確認する
select seq_on_chance_contract.nextval from dual; select seq_on_chance_contract.currval from dual;
変更する必要があるシーケンス名が seq_on_chance_contract
-- 重置序列 select seq_on_chance_contract.nextval from dual; -- 假设得到结果 n alter sequence seq_on_chance_contract increment by -2; -- 注意是 -(n-1) select seq_on_chance_contract.nextval from dual; -- 再查一遍,走一下,重置为1了 alter sequence seq_on_chance_contract increment by 1; -- 还原
2 であるとします。ストアド プロシージャを使用して (v_seqname) を実装します。
create or replace procedure seq_reset(v_seqname varchar2) as n number(10); tsql varchar2(100); begin execute immediate 'select '||v_seqname||'.nextval from dual' into n; n:=-(n-1); tsql:='alter sequence '||v_seqname||' increment by '|| n; execute immediate tsql; execute immediate 'select '||v_seqname||'.nextval from dual' into n; tsql:='alter sequence '||v_seqname||' increment by 1'; execute immediate tsql; end seq_reset;
次に、ストアド プロシージャを呼び出します:
exec seq_reset('v_seqname');
この記事は、PHP 中国語 Web サイトの
mysql チュートリアルコラムから引用したものです。学習へようこそ!
以上がOracle で自動増加する主キーを作成する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。