sql >> Database >  >> RDS >> PostgreSQL

Primaire sleutel voor meerdere kolommen in PostgreSQL?

Er kan er maar één zijn primaire sleutel per tabel - zoals aangegeven door het woord "primair".
U kunt aanvullende UNIQUE kolommen zoals:

CREATE TABLE test(
   sl_no int PRIMARY KEY,  -- NOT NULL due to PK
   emp_id int UNIQUE NOT NULL,
   emp_name text,
   emp_addr text
);

Kolommen die (onderdeel van) de PRIMARY KEY . zijn zijn gemarkeerd met NOT NULL automatisch.

Of gebruik een tabelbeperking in plaats van een kolombeperking om een ​​enkele meerdere kolommen primaire sleutel . Dit is semantisch anders dan het bovenstaande:Nu, alleen de combinatie van beide kolommen moet uniek zijn, elke kolom kan op zichzelf duplicaten bevatten.

CREATE TABLE test(
   sl_no int,     -- NOT NULL due to PK below
   emp_id int ,   -- NOT NULL due to PK below
   emp_name text,
   emp_addr text,
   PRIMARY KEY (sl_no, emp_id)
);

Meerdere kolommen UNIQUE beperkingen zijn ook mogelijk.

Terzijde:gebruik geen CaMeL-case-ID's in Postgres. Gebruik legale identificatiecodes in kleine letters, zodat u nooit dubbele aanhalingstekens hoeft te gebruiken. Maakt uw leven gemakkelijker. Zie:



  1. De nieuwe primaire sleutel-ID van het record ophalen uit de MySQL-query voor invoegen?

  2. Voeg twee tabellen samen en vind overlappende datums en hiaten

  3. Hoe MySQL Looped Join welke tests uitvoeren als de resultaten compleet zijn?

  4. Onjuist sleutelbestand voor tabel MYSQL