Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

MySQL - Signification de PRIMARY KEY, UNIQUE KEY et KEY lorsqu'ils sont utilisés ensemble lors de la création d'une table

Une clé est juste un index normal. Un moyen de simplifier est de le considérer comme un catalogue sur fiches dans une bibliothèque. Cela pointe MySQL dans la bonne direction.

Une clé unique est également utilisée pour améliorer la vitesse de recherche, mais elle a la contrainte qu'il ne peut y avoir d'éléments en double (il n'y a pas deux x et y où x n'est pas y et x ==y).

Le manuel l'explique comme suit :

Un index UNIQUE crée une contrainte telle que toutes les valeurs de l'index doivent être distinctes. Une erreur se produit si vous essayez d'ajouter une nouvelle ligne avec une valeur de clé qui correspond à une ligne existante. Cette contrainte ne s'applique pas aux valeurs NULL sauf pour le moteur de stockage BDB. Pour les autres moteurs, un index UNIQUE autorise plusieurs valeurs NULL pour les colonnes pouvant contenir NULL. Si vous spécifiez une valeur de préfixe pour une colonne dans un index UNIQUE, les valeurs de colonne doivent être uniques dans le préfixe.

Une clé primaire est une clé unique « spéciale ». Il s'agit essentiellement d'une clé unique, sauf qu'elle est utilisée pour identifier quelque chose.

Le manuel explique comment les index sont utilisés en général :ici.

Dans MSSQL, les concepts sont similaires. Il existe des index, des contraintes uniques et des clés primaires.

Non testé, mais je crois que l'équivalent MSSQL est :

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);

Edit :le code ci-dessus est testé pour être correct ; cependant, je soupçonne qu'il existe une bien meilleure syntaxe pour le faire. Cela fait un moment que je n'ai pas utilisé SQL Server, et apparemment j'en ai oublié pas mal :).