Hasta ahora, he creado las tablas manualmente de esta manera y no tuve ningún problema.
CREATE TABLE users ( id BIGINT(20) UNSIGNED NOT NULL AUTO_INCREMENT, email VARCHAR(100) NOT NULL, cityId BIGINT(20) UNSIGNED NULL DEFAULT NULL, PRIMARY KEY (id), FOREIGN KEY (cityId) REFERENCES cities (id));Ahora, estoy usando MySQL Workbench que genera la secuencia de comandos SQL para mí, y la secuencia de comandos SQL se ve un poco diferente.
CREATE TABLE users ( id BIGINT(20) UNSIGNED NOT NULL AUTO_INCREMENT, email VARCHAR(100) NOT NULL, cityId BIGINT(20) UNSIGNED NULL DEFAULT NULL, PRIMARY KEY (id), CONSTRAINT cityId FOREIGN KEY (cityId) REFERENCES locations (id) ON DELETE NO ACTION ON UPDATE NO ACTION);Me pregunto si hay alguna diferencia entre estas dos consultas.
No es necesario que proporcione un nombre para una clave externa y, si no lo hace, se le asignará un nombre generado automáticamente. Habiendo dicho eso, es una buena práctica y facilitará su trabajo de mantenimiento.