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;
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) )
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;
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';
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;
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; -- 还原
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;
Dieser Artikel stammt von der chinesischen PHP-Website, Spalte
MySQL-TutorialDas 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!