2010-10-10 18 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; 

No entiendo el significado de poner ENGINE = INNODB aquí, y ¿por qué usamos ON DELETE CASCADE?mysql concepto de clave externa

Respuesta

3

engine = innodb se asegurará de que reciba soporte de claves foráneas. El motor MyISAM predeterminado no admite claves externas. En delete cascade se eliminará la fila secundaria si se elimina la fila referenciada en la tabla padre.

1

MySQL es el motor de DB. Puede usar múltiples motores de almacenamiento. MyISAM es el motor de almacenamiento predeterminado para MySQL y no admite claves externas. InnoDB es otro motor de almacenamiento que admite claves externas. Debe especificar ENGINE = InnoDB porque MySQL usará MyISAM de manera predeterminada.

ON DELETE CASCADE eliminará todas las filas de una tabla que tengan una clave externa que haga referencia a una clave que se elimine. Creo que es peligroso y frustra mucho el propósito de la restricción de la clave externa, así que evitaría usarla, pero esta es solo mi opinión personal.

Digamos que tienes:

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

Y en OrdersItems tiene FOREIGN KEY (proID) Referencias Productos (proID) ON DELETE CASCADE.

Entonces, si alguien se queda

DELETE FROM Products WHERE proID = 2 

A continuación, también se eliminan las filas con OrdID 4 y 5 (que cae en cascada).

+0

¿uso la cascada o no? ¿Qué tal en la actualización –

+0

No usaría ninguna de las dos cosas? Sin embargo, si usted quiere usarlos, depende totalmente de usted. Sugiero leerlos completamente en la API de MySQL antes de tomar su decisión: http://dev.mysql.com/doc/refman/5.1/en/innodb-foreign-key-constraints.html –

Cuestiones relacionadas