MySQL: quelle est la différence entre INDEX, UNIQUE, CLÉ ÉTRANGÈRE, et la CLÉ PRIMAIRE?
Ok, donc je suis un newbie en SQL..
Je suis paramètres de mes tables, et je suis confus sur les index, les clés, les clés étrangères..
J'ai une table des utilisateurs, et une table de projets.
Que je veux utiliser pour les utilisateurs (id) pour joindre un projet à un utilisateur.
C'est ce que j'ai à ce jour:
DROP TABLE IF EXISTS projects;
CREATE TABLE projects (
id int(8) unsigned NOT NULL,
user_id int(8),
name varchar(120) NOT NULL,
description varchar(300),
created_at date,
updated_at date,
PRIMARY KEY (id),
KEY users_id (user_id)
) ENGINE=InnoDB;
ALTER TABLE projects (
ADD CONSTRAINT user_projects,
FOREIGN KEY (user_id) REFERENCES users(id),
ON DELETE CASCADE
)
Donc ce que je suis perdu sur est qu'est-ce que les différences entre un clé, un indice, un contrainte et un clé étrangère?
J'ai été à la recherche en ligne et ne peut pas trouver un débutant explication.
PS. Je suis en utilisant phpactiverecord et ont des relations mis en place dans les modèles
utilisateur-> has_many ("projets");
projets -> belongs_to('utilisateur');
Pas sûr que cela n'a rien à voir avec ça, mais j'ai pensé jeter là..
Grâce.
EDIT:
J'ai pensé qu'il pourrait être quelque chose à faire avec Navicat, je suis donc allé dans WampServer -> phpMyAdmin et de l'exécution de cette...
DROP TABLE IF EXISTS projects;
CREATE TABLE projects (
id int(8) unsigned NOT NULL,
user_id int(8) NOT NULL,
name varchar(120) NOT NULL,
description varchar(300),
created_at date,
updated_at date,
PRIMARY KEY (id),
KEY users_id (user_id),
FOREIGN KEY (user_id) REFERENCES users(id)
) ENGINE=InnoDB;
Toujours rien... 🙁
Pour être honnête, si vous êtes nouveau à MySQL, vous ne devriez pas utiliser InnoDB, sauf si vous savez pourquoi vous voulez l'utiliser... Utiliser MyISAM par défaut, jusqu'à ce que vous ayez une meilleure compréhension sur les moteurs de stockage
il a dit que vous ne pouvez utiliser les clés étrangères avec INNODB.
Nope, MyIsam ne prend pas en charge FKs - il simplement de créer un INDEX sur les colonnes que vous définissez un FK sur. Seulement InnoDB supporte FKs.
Êtes-vous sûr que votre
users
table InnoDB? Si ce n'est pas le cas, vous ne serez pas en mesure de faire un FK référence.OriginalL'auteur Jake Chapman | 2012-12-02
Vous devez vous connecter pour publier un commentaire.
Expansion sur Chamil réponses:
INDICE est similaire à l'index à la fin d'un livre. Il simplifie look-up pour les données dans la colonne afin que les recherches sont plus rapides. Plaisir les détails: MyISAM utilise un hashtable pour stocker les index, les clés qui les données, mais il est encore linéairement proportionnelle à la profondeur de la taille de la table. InnoDB utilise un B-arbre structure de son index. Un B-arbre est similaire à un ensemble imbriqué - il décompose les données en logique les groupes d'enfants, le sens de la recherche de la profondeur est beaucoup plus petite. En tant que tel, les recherches par les plages sont plus rapides dans un InnoDB, alors que les recherches d'une clé unique sont plus rapides en MyISAM (essayez de vous rappeler le Grand O de tables de hachage et des arbres binaires).
INDEX UNIQUE est un index dans lequel chaque ligne dans la base de données doit avoir une valeur unique pour cette colonne ou un groupe de colonnes. C'est utile pour empêcher la duplication, par exemple, pour un e-mail colonne dans une table d'utilisateurs où vous souhaitez qu'un seul compte par adresse email. Est Important de noter que dans MySQL, un
INSERT... ON DUPLICATE KEY UPDATE
déclaration d'exécuter la mise à jour si elle trouve un double index unique match, même si ce n'est pas votre clé primaire. C'est un piège à connaître lors de l'utilisationINSERT... UPDATE
déclarations sur les tables uniques. Vous pouvez enrouler involontairement écraser les records! Une autre remarque à propos de Uniques en MySQL par l'ANSI-92, les valeurs NULL ne sont pas à être considéré comme unique, ce qui signifie que vous pouvez avoir plusieurs valeurs NULL dans une nullable unique-colonne indexée. Même si c'est une norme, d'autres RDBMSes diffèrent sur la mise en œuvre de cette.CLÉ PRIMAIRE est un INDEX UNIQUE qui est le identificateur pour une ligne donnée dans le tableau. En tant que tel, il ne doit pas être null, et est enregistrée en tant que index cluster. Cluster signifie que les données sont écrites à votre système de fichiers dans l'ordre croissant sur le PK. Cela fait des recherches sur la clé primaire est significativement plus rapide que n'importe quel autre type d'index (comme dans MySQL, seul le PK peut être votre index cluster). Note que le regroupement provoque également des préoccupations avec INSERT si vos données ne sont pas AUTO_INCREMENTed, MySQL devra maj des données sur le système de fichiers si vous insérez une nouvelle ligne avec un PK avec une baisse de la valeur ordinale. Cela pourrait nuire à votre DB de rendement. Donc, sauf si vous êtes certain que vous savez ce que vous faites, toujours utiliser un auto-incrémenté de la valeur pour votre PK dans MySQL.
CLÉ ÉTRANGÈRE est une référence à une colonne d'une autre table. Elle met en application de l'Intégrité Référentielle, ce qui signifie que vous ne pouvez pas créer une entrée dans une colonne qui a une clé étrangère dans une autre table si la valeur saisie n'existe pas dans la table référencée. Dans MySQL, une CLÉ ÉTRANGÈRE ne pas améliorer les performances de recherche. Il faut aussi que les deux tables dans la définition de la clé d'utiliser le moteur InnoDB, et ont le même type de données, le jeu de caractères et collation.
OriginalL'auteur Steven Moseley
CLÉ est juste un autre mot pour l'INDICE.
Un index UNIQUE signifie que toutes les valeurs de cet indice doit être unique, et pas le même que fourmi, d'autres au sein de l'indice. Par exemple, à une colonne d'Id dans une table.
Une CLÉ PRIMAIRE est un index unique où toutes les colonnes de clé doit être définie comme not NULL, j'.e, toutes les valeurs de l'indice doit être définie. Idéalement, chaque table doit avoir (et ont) une clé primaire.
Une CLÉ ÉTRANGÈRE est une contrainte référentielle entre deux tables. Cette colonne/index doit avoir le même type et de même longueur que la visée de la colonne dans la table. Un exemple d'une CLÉ ÉTRANGÈRE est un nom d'utilisateur, entre un utilisateur de connexion de table et une table des utilisateurs. Notez qu'il montre généralement à une CLÉ PRIMAIRE dans la table.
Il n'est pas difficile à comprendre.
J'ai modifié et mis à bouillir vers le bas autant que je le peux, mais je ressens ce que j'ai écrit est simplifiée à l'extrême.
Ajout de plus d'expliquer un peu plus, va probablement continuer à ajouter
OriginalL'auteur bear