sql >> Database >  >> RDS >> Sqlserver

MySQL - Betekenis van PRIMARY KEY, UNIQUE KEY en KEY wanneer ze samen worden gebruikt tijdens het maken van een tabel

Een sleutel is gewoon een normale index. Een veel te grote vereenvoudiging is om het te zien als een kaartencatalogus in een bibliotheek. Het wijst MySQL in de goede richting.

Er wordt ook een unieke sleutel gebruikt voor een verbeterde zoeksnelheid, maar deze heeft als beperking dat er geen dubbele items mogen zijn (er zijn geen twee x en y waarbij x niet y is en x ==y).

De handleiding legt het als volgt uit:

Een UNIEKE index creëert een beperking zodat alle waarden in de index verschillend moeten zijn. Er treedt een fout op als u een nieuwe rij probeert toe te voegen met een sleutelwaarde die overeenkomt met een bestaande rij. Deze beperking is niet van toepassing op NULL-waarden, behalve voor de BDB-opslagengine. Voor andere engines staat aUNIQUE index meerdere NULL-waarden toe voor kolommen die NULL kunnen bevatten. Als u een prefixwaarde opgeeft voor een kolom in een UNIEKE index, moeten de kolomwaarden uniek zijn binnen de prefix.

Een primaire sleutel is een 'bijzondere' unieke sleutel. Het is eigenlijk een unieke sleutel, behalve dat het wordt gebruikt om iets te identificeren.

De handleiding legt uit hoe indexen in het algemeen worden gebruikt:hier.

In MSSQL zijn de concepten vergelijkbaar. Er zijn indexen, unieke beperkingen en primaire sleutels.

Niet getest, maar ik geloof dat het MSSQL-equivalent is:

CREATE TABLE tmp (
  id int NOT NULL PRIMARY KEY IDENTITY,
  uid varchar(255) NOT NULL CONSTRAINT uid_unique UNIQUE,
  name varchar(255) NOT NULL,
  tag int NOT NULL DEFAULT 0,
  description varchar(255),
);

CREATE INDEX idx_name ON tmp (name);
CREATE INDEX idx_tag ON tmp (tag);

Bewerken:de bovenstaande code is getest om correct te zijn; ik vermoed echter dat er een veel betere syntaxis is om het te doen. Het is een tijdje geleden dat ik SQL-server heb gebruikt, en blijkbaar ben ik nogal wat vergeten :).



  1. Splits één kolomwaarde in meerdere kolomwaarden

  2. SQLite invoegen

  3. Cronjob of MySQL-event?

  4. Verzamelmethode:COUNT-functie in Oracle Database