sql >> Database >  >> RDS >> PostgreSQL

Een primaire sleutel voor automatisch verhogen definiëren in PostgreSQL

Voor een relationele database zoals PostgreSQL kan het algemeen als een zonde worden beschouwd onder ontwikkelaars niet om een ​​primaire sleutel in elke tabel op te nemen. Het is daarom van cruciaal belang dat u uw uiterste best doet om die uiterst belangrijke primaire-sleutelkolom aan elke tabel toe te voegen, en gelukkig biedt Postgres twee methoden om deze taak te volbrengen.

Het seriële gegevenstype gebruiken

Veruit de eenvoudigste en meest gebruikelijke techniek voor het toevoegen van een primaire sleutel in Postgres is het gebruik van de SERIAL of BIGSERIAL gegevenstypen bij CREATING een nieuwe tafel. Zoals aangegeven in de officiële documentatie, SERIAL is geen echt gegevenstype, maar is gewoon een verkorte notatie die Postgres vertelt om een ​​automatisch verhoogde, unieke identifier te maken voor de opgegeven kolom.

Hieronder maken we onze eenvoudige books tabel met een geschikte SERIAL gegevenstype voor de primaire sleutel.

CREATE TABLE books (
  id              SERIAL PRIMARY KEY,
  title           VARCHAR(100) NOT NULL,
  primary_author  VARCHAR(100) NULL
);

Door simpelweg onze id . in te stellen kolom als SERIAL met PRIMARY KEY bijgevoegd, zal Postgres al het gecompliceerde werk achter de schermen afhandelen en automatisch onze id verhogen kolom met een unieke, primaire sleutelwaarde voor elke INSERT .

Een aangepaste reeks gebruiken

In sommige zeldzame gevallen is het standaard incrementele karakter ingebouwd in de SERIAL en BIGSERIAL gegevenstypen passen mogelijk niet bij uw behoeften. In deze gevallen kunt u dezelfde functie voor automatisch ophogen van de primaire sleutel voor uw kolom uitvoeren door een aangepaste SEQUENCE te maken. , vergelijkbaar met de methode die wordt gebruikt in een oudere versie van Oracle.

Misschien zijn we vooral dol op even getallen, maar hebben we ook een sterke afkeer van alles kleiner dan 100, dus we willen alleen dat onze primaire sleutel met twee wordt verhoogd, beginnend bij 100 voor elke invoeging. Dit kan worden bereikt met een aangepaste SEQUENCE zoals zo:

CREATE SEQUENCE books_sequence
  start 2
  increment 2;

Als we nu INSERT een nieuw record in onze books tabel, moeten we de volgende waarde van onze reeks evalueren met nextval('books_sequence') en gebruik dat als onze id .

INSERT INTO books
  (id, title, primary_author)
VALUES
  (nextval('books_sequence'), 'The Hobbit', 'Tolkien');

SEQUENCES kan desgewenst nog meer gekruid worden, met opties als minvalue en maxvalue om natuurlijk extreme waarden aan te geven, en zelfs CYCLE , waardoor de reeks kan "rondlopen" zodra deze de maxvalue . bereikt , terugkerend naar de start waarde en begint de klim helemaal opnieuw. Veel meer informatie is te vinden in de officiële documentatie.


  1. Hoe te detecteren of een waarde ten minste één numeriek cijfer bevat in MariaDB

  2. Hoe kan ik de standaard Mysql-verbindingstime-out wijzigen wanneer ik verbinding maak via python?

  3. Vind alle niet-numerieke waarden in een kolom in MariaDB

  4. Python import MySQLdb-fout - Mac 10.6