Cita: Sobre lo de las tablas que me comentas (InnoDB o MyISAM) desconozco el tema...
El tema es simple:
MySQL puede usar diferentes tipos de motores de tablas subyacentes. Desde la versión 5.0.x usa InnoDB como motor por default, pero hay algunas versiones (académicas, creo) que tienen activado por default el MyISAM. La diferencia esencial radica en que las InnoDB soportan transaccciones e integridad referencial y las MySAM no (ni lo uno ni lo otro).
Esta diferencia es crítica porque tu no estás indicando en el script cuál ENGINE usarás, por lo que si lo ejecutaras en un server MySQL con MyISAM por default no tendrás jamás control de FK.
En las tablas MyISAM es el programador el que debe cuidar la integridad referencial porque el DBMS no le va a avisar nada cuando se produzca una violación de la misma, porque no lo detecta. Tampoco puedes crear ni administrar transacciones, lo que hace que haya más programación en el asunto.
Las tablas MyISAM son muy usadas en la web por la rapidez de inserciones/actualizaciones/borrados, pero no sirven para modelo de datos de cierta complejidad como el que quieres.
Revisa las variables locales del server: Allí sale qué motor estás usando por default:
Código MySQL:
Ver original+---------------+
| @@have_innodb |
+---------------+
| YES |
+---------------+