2010-10-10 13 views
5
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; 

Non capisco il significato di mettere ENGINE = INNODB qui, e perché si utilizza ON DELETE CASCADE?mysql foreign key concept

risposta

3

engine = innodb assicurerà di ottenere supporto chiave esterna. Il motore MyISAM predefinito non supporta chiavi esterne. On delete cascade rimuoverà la riga figlia se viene rimossa la riga di riferimento nella tabella padre.

1

MySQL è il motore DB. Può utilizzare più motori di archiviazione. MyISAM è il motore di archiviazione predefinito per MySQL e non supporta chiavi esterne. InnoDB è un altro motore di archiviazione che supporta chiavi esterne. È necessario specificare ENGINE = InnoDB perché MySQL utilizzerà MyISAM per impostazione predefinita.

ON DELETE CASCADE elimina tutte le righe in una tabella con una chiave esterna che fa riferimento a una chiave eliminata. Penso che sia pericoloso e sconfigge molto lo scopo della restrizione delle chiavi straniere, quindi eviterei di usarlo, ma questa è solo la mia opinione personale.

Diciamo che avete:

+-------+-------+ 
| ordID | proID | 
+-------+-------+ 
|  1 |  1 | 
|  2 |  1 | 
|  3 |  1 | 
|  4 |  2 | 
|  5 |  2 | 
+-------+-------+ 

E su OrdersItems ha FOREIGN KEY (proID) RIFERIMENTI Prodotti (proID) ON DELETE CASCADE.

Poi, se qualcuno corre

DELETE FROM Products WHERE proID = 2 

Poi verrà eliminato anche le righe con ordID 4 e 5 (IT cascate).

+0

così uso la cascata o no? che dire sull'aggiornamento –

+0

non userei nessuno dei due. Tuttavia, se si desidera utilizzarli dipende totalmente da te. Suggerisco di leggerli completamente nell'API MySQL prima di prendere una decisione: http://dev.mysql.com/doc/refman/5.1/en/innodb-foreign-key-constraints.html –

Problemi correlati