MySQL soporta perfectamente restricciones únicas.
Sin embargo, no admite restricciones/índices parciales, por lo que deberá marcar las imágenes no primarias con un NULL en lugar de 0 .
ALTER TABLE file ADD CONSTRAINT ux_file_customer_primary
UNIQUE (customerId, isPrimaryImage)
Puede insertar un número arbitrario de NULL valores en isPrimaryImage pero solo un valor no nulo por cliente.