Heim > Datenbank > MySQL-Tutorial > Hauptteil

So erstellen Sie einen automatisch erhöhenden Primärschlüssel in Oracle

angryTom
Freigeben: 2019-11-27 14:02:51
nach vorne
2737 Leute haben es durchsucht

So erstellen Sie einen automatisch erhöhenden Primärschlüssel in Oracle

Wie Oracle einen sich selbst erhöhenden Primärschlüssel erstellt

Oracle-Primärschlüssel werden üblicherweise in UUID unterteilt und Es gibt zwei Arten von sich selbst erhöhenden int. Lassen Sie uns kurz über ihre jeweiligen Vor- und Nachteile sprechen:

Vorteile von UUID

1. Es ist einfach zu generieren, unabhängig davon, ob es sich um eine UUID handelt, die einfach mit sys_guid() oder Javas UUID erstellt werden kann.

2. Geeignet für Einfüge- und Aktualisierungsvorgänge in Stapeldaten.

3. Die serverübergreifende Datenzusammenführung ist sehr praktisch.

Vorteile der INT-Selbsterhöhung

Geringer Platzbedarf

2. Gute Leistung, UUID ist nicht auf dem gleichen Niveau wie int

3. Leicht zu merken

Ihre jeweiligen Vorteile sind die Mängel des anderen

Empfehlen Sie „MySQL-Video-Tutorial

Anwendbar Bereich:

Im Allgemeinen wird UUID als einziger Primärschlüssel in einer verteilten Umgebung verwendet. Wie bei anderen Projekten empfehle ich dringend, int als Primärschlüssel zu verwenden.

PS: Kürzlich kam es bei einem meiner verteilten Projekte während der Hauptzugriffszeit am Wochenende auch zu einer UUID-Duplizierung, daher habe ich den Vorteil der UUID als global eindeutige ID nicht aufgeschrieben, aber wir können Zookeeper als primäre ID verwenden Zu generierender Schlüssel Der Operator erstellt einen eindeutigen Primärschlüssel vom Typ int, was völlig in Ordnung ist.

Zusammenfassend empfehle ich also immer noch, dass alle Primärschlüssel den Typ int verwenden sollten. Die Vorteile des Typs int liegen besonders auf der Hand, wenn es um zig Millionen Daten geht.

Oracle-Schritte zum Erstellen einer automatischen Inkrementierung:

Auto-Inkrementierungssequenz erstellen

-- 创建自增长序列
create sequence seq_on_chance_contract
increment by 1 -- 每次加1
start with 1 -- 从1开始计数
nomaxvalue -- 不设置最大值
nocycle -- 一直累加
nocache;
Nach dem Login kopieren

Datentabelle erstellen

Der Primärschlüssel kann INTEGER und NUMBER verwenden. Wenn das System Hibernate als ORM-Framework verwendet, wird die Verwendung von 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)
)
Nach dem Login kopieren

zum Erstellen eines Primärschlüssels nicht empfohlen, sodass Sie den ID-Primärschlüssel nicht verwalten müssen beim Hinzufügen neuer Datensätze. :


Alle Sequenzen und Tabellen anzeigen

-- 创建主键触发器  
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;
Nach dem Login kopieren

Anzeige, wie viele aktuelle Sequenzen vorhanden sind

-- 查找所有SEQUENCE、TABLE
select * from user_objects ubs;
-- 查找所有SEQUENCE
select * from user_objects ubs where ubs.OBJECT_TYPE='SEQUENCE';
Nach dem Login kopieren

Sequenz zurücksetzen


Allgemeines Zurücksetzen Die Sequenz muss gelöscht und dann neu erstellt werden, aber das ist problematischer. Es gibt zwei Methoden unten, ohne die Sequenz zu löschen:

1 Verwenden Sie den Schrittparameter, um zuerst den nächsten Wert herauszufinden Denken Sie daran, den Wert schrittweise in negativ zu ändern (und umgekehrt) und ihn dann wieder zurück zu ändern.

Angenommen, der Sequenzname, der geändert werden muss, ist seq_on_chance_contract

select seq_on_chance_contract.nextval from dual;
select seq_on_chance_contract.currval from dual;
Nach dem Login kopieren

2. Verwenden Sie die gespeicherte Prozedur, um (v_seqname) zu implementieren

-- 重置序列
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;   -- 还原
Nach dem Login kopieren

Dann rufen Sie die gespeicherte Prozedur auf:

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;
Nach dem Login kopieren

Dieser Artikel stammt von der chinesischen PHP-Website, Spalte

MySQL-Tutorial

, willkommen zum Lernen!

Das obige ist der detaillierte Inhalt vonSo erstellen Sie einen automatisch erhöhenden Primärschlüssel in Oracle. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:cnblogs.com
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage