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... 🙁

En êtes-vous des messages d'erreur à partir de votre cadre?
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