Comment utiliser le mot-clé 'references' dans MySQL?

Comment le mot clé references est-il utilisé lors de la création d'une table?

Disons que je veux créer deux tables person et hobby et que je veux que l'ID de la table hobby fasse référence à l'id de person?

person table
- id
- name

hobby
- id
- person_id
- hobby_name

Comment puis-je faire ça?

23
demandé sur Eric Leschinski 2010-02-03 16:44:43

5 réponses

Créez la table hobby de la même manière que ceci:

CREATE TABLE hobby (
  id INT NOT NULL AUTO_INCREMENT,
  person_id INT NOT NULL,
  hobby_name VARCHAR(255),
  PRIMARY KEY(id),
  FOREIGN KEY(person_id) REFERENCES person(id))
28
répondu Håvard S 2010-02-03 13:48:56

Voici un exemple directement à partir du site Web MySQL :

CREATE TABLE parent (id INT NOT NULL,
                     PRIMARY KEY (id)
) ENGINE=INNODB;

CREATE TABLE child (id INT, parent_id INT,
                    INDEX par_ind (parent_id),
                    FOREIGN KEY (parent_id) REFERENCES parent(id)
                    ON DELETE CASCADE
) ENGINE=INNODB;
6
répondu AJ. 2010-02-03 13:47:27
CREATE TABLE person (person_id INT NOT NULL, 
PRIMARY KEY (person_id));

CREATE TABLE hobby (hobby_id INT NOT NULL, person_id INT NOT NULL,
PRIMARY KEY(hobby_id),
FOREIGN KEY(person_id) REFERENCES person(person_id));

Le mot-clé references est utilisé pour définir la table et la colonne utilisées dans une relation de clé étrangère. Cela signifie qu'un enregistrement dans le hobby table doit avoir une person_id qui existe dans la table personne ou d'autre au moment de l'insertion, vous recevrez un message d'erreur que la clé n'existe pas.

Pour répondre à votre question ci-dessus sur ce que fait" ON DELETE CASCADE", il vous permet de supprimer un enregistrement de clé parent (en personne) et ses enregistrements enfants correspondants (en passe-temps) sans avoir à supprimer tous les enfants les enregistrements.

Pour clarifier, si vous avez des enregistrements enfants attachés à une entrée de clé primaire et que vous essayez de supprimer l'entrée de clé primaire comme:

DELETE FROM person where person_id = 1;

Sans avoir la suppression sur CASCADE, vous recevriez une erreur si des enregistrements dans hobby avaient person_id de 1. Vous devez d'abord supprimer tous ces enregistrements avant de faire la suppression ci-dessus. Avec DELETE on CASCADE utilisé, la suppression ci-dessus réussirait et supprimerait automatiquement tout et tout enregistrements de la table hobby table liés à person_id en cours de suppression de la table de clé primaire.

6
répondu RC. 2010-02-03 14:13:10

Le mot-clé de référence est utilisé pour savoir d'où vient la clé étrangère. Cela signifie Quel est le nom de la table et quel est le nom de ceci dans cette table.

Je dis que c'est correct :

CREATE TABLE person (person_id INT NOT NULL, 
PRIMARY KEY (person_id));

CREATE TABLE hobby (hobby_id INT NOT NULL, person_id INT NOT NULL,
PRIMARY KEY(hobby_id),
FOREIGN KEY(person_id) REFERENCES person(person_id));

Ensuite, regardez cette ligne : La clé étrangère (person_id) fait référence à person (person_id));

Ici person_id est la clé étrangère et elle vient de la table person et dans cette table son nom est person_id... C'est tout.

1
répondu Maniruzzaman Akash 2016-08-28 18:55:17

Voici un exemple de comment vous pouvez l'utiliser.

create table hobby(id int references person(id),person_id int,hobby_varchar(20), primary key(id));

Pour ce que cela signifie, references nous permet de spécifier la colonne de la table cible à laquelle se réfère une clé étrangère.

-1
répondu Abhi 2016-12-19 06:48:57