2010-02-03 16 views
23

In che modo viene utilizzata la parola chiave durante la creazione di una tabella?Come utilizzare la parola chiave "riferimenti" in MySQL?

Diciamo che voglio creare due tabelle person e hobby e voglio che l'ID della tabella hobby faccia riferimento all'ID di persona?

person table 
- id 
- name 

hobby 
- id 
- person_id 
- hobby_name 

Come faccio?

+1

Vale la pena notare, un FK in linea ('HobbyID INT REFERENCES Hobbies (ID)') NON funziona. Questo è stato recentemente segnalato come un bug (http://bugs.mysql.com/bug.php?id=4919), quindi sono sicuro che se ne occuperanno presto. –

risposta

28

creare la tabella mio hobby in modo simile a questo:

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

Ecco un esempio directly from MySQL website:

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; 
+0

qual è il "ON DELETE CASCADE" signore? – sasori

+2

@sasori - significa che quando si elimina un record nella tabella padre, verranno eliminati anche tutti i record in child table con riferimenti fk a parent. questo è indicato come "Eliminazione a cascata". –

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

La parola chiave riferimenti viene utilizzato per definire quale tabella e la colonna viene utilizzato in una relazione chiave esterna. Ciò significa che un record nella tabella hobby deve avere un identificativo persona che esiste nella tabella delle persone oppure al momento dell'inserimento si riceverà un errore che la chiave non esiste.

Per rispondere alla domanda sopra riportata su "ON DELETE CASCADE", consente di eliminare un record della chiave madre (di persona) e i record figli corrispondenti (nell'hobby) senza dover prima cancellare tutti i record figli.

Per chiarire, se si dispone di record figli attaccati a una voce chiave primaria e si tenta di eliminare la voce chiave primaria come:

DELETE FROM person where person_id = 1; 

senza avere la Elimina da CASCADE, si riceverà un errore se qualsiasi i record nell'hobby avevano 1 persona su 1. Avresti cancellato tutti quei record prima di fare l'eliminazione sopra. Con DELETE ON CASCADE usato, l'eliminazione di cui sopra avrà esito positivo e cancellerà automaticamente tutti i record dalla tabella hobby della tabella collegata alla persona_id che viene eliminata dalla tabella della chiave primaria.

1

La parola chiave di riferimento è in realtà utilizzata per sapere dove è arrivata la chiave esterna. Ciò significa qual è il nome della tabella e qual è il nome di questo in quella tabella.

dico questo è corretto:

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

Poi, guarda questa linea: FOREIGN KEY (person_id) RIFERIMENTI persona (person_id));

Qui person_id è la chiave esterna e proviene dalla tabella delle persone e in quella tabella il suo nome è person_id ... Questo è tutto.

-1

Ecco un esempio di come è possibile utilizzarlo.

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

Per ciò che significa, references ci permette di specificare la colonna della tabella di destinazione a cui una chiave esterna fa riferimento.

Problemi correlati