ホームページ  >  記事  >  データベース  >  Oracle で自動増加する主キーを作成する方法

Oracle で自動増加する主キーを作成する方法

angryTom
angryTom転載
2019-11-27 14:02:512734ブラウズ

Oracle で自動増加する主キーを作成する方法

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 を使用している場合、NUMBER

create 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;

シーケンスをリセット

一般的なリセット シーケンスを削除してから再構築する必要がありますが、これはさらに面倒です。シーケンスを削除せずにこれを行うには、次の 2 つの方法があります:

1. step パラメータを使用する最初にシーケンスの nextval を見つけます。値を負に増分変更 (またはその逆) してから、再度値を元に戻すことを忘れないでください。


変更する必要があるシーケンス名が 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 サイトの他の関連記事を参照してください。

声明:
この記事はcnblogs.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。