Tienes al menos tres problemas básicos:
1. No puedes ponerle ON DELETE SET NULL, si el campos es NOT NULL. Es incongruente y no lo admitirá.
2. El CHARSET por default de la versión es LATIN1, si no se lo indicas los tipos de columna se vuelve incompatibles y genera un error. Este error estaba parcialmente salvado.
3. Estas usando una sintaxis obsoleta en la construcción de la tabla; por caso, la cláusula TYPE dejó de ser usada hace mucho, lo que va es ENGINE. Si bien el parser de MySQL se encarga de resolver la mayor parte del problema, es mejor ajustarse siempre al estandar.
La sintaxis para la versión 5.1 y posteriores sería:
Código sql:
Ver originalDROP TABLE IF EXISTS `modelo_vehiculos`;
CREATE TABLE `modelo_vehiculos` (
`modelo` VARCHAR(50) NOT NULL,
`idmodelo` BIGINT(20) UNSIGNED NOT NULL AUTO_INCREMENT,
`categoria` VARCHAR(25) CHARACTER SET latin1 NOT NULL,
`unidades` INT(11) DEFAULT NULL,
PRIMARY KEY (`modelo`),
UNIQUE KEY `modelo` (`modelo`),
UNIQUE KEY `idmodelo` (`idmodelo`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
DROP TABLE IF EXISTS `vehiculos`;
CREATE TABLE `vehiculos` (
`matricula` VARCHAR(8) NOT NULL,
`codveh` BIGINT(20) UNSIGNED NOT NULL AUTO_INCREMENT,
`modelo` VARCHAR(50) NOT NULL,
`categoria` VARCHAR(25) NOT NULL,
`costedia` DOUBLE NOT NULL,
`numplazas` INT(11) DEFAULT NULL,
`numpuertas` INT(11) DEFAULT NULL,
`maletas` INT(11) DEFAULT NULL,
`radio` tinyint(1) DEFAULT '1',
`aire` tinyint(1) DEFAULT '0',
`descincidencias` VARCHAR(1000) DEFAULT NULL,
`fecha` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
`fechamod` TIMESTAMP NULL DEFAULT NULL,
`reservado` tinyint(1) DEFAULT '0',
`alquilado` tinyint(1) DEFAULT '0',
`foto` longblob,
PRIMARY KEY (`codveh`),
UNIQUE KEY `matricula` (`matricula`),
UNIQUE KEY `codveh` (`codveh`),
KEY `ca_modelo` (`modelo`),
CONSTRAINT `ca_modelo` FOREIGN KEY (`modelo`) REFERENCES `modelo_vehiculos` (`modelo`) ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8;