MySQL supporta perfettamente vincoli unici.
Tuttavia, non supporta vincoli/indici parziali, quindi dovresti contrassegnare le immagini non primarie con un NULL invece di 0 .
ALTER TABLE file ADD CONSTRAINT ux_file_customer_primary
UNIQUE (customerId, isPrimaryImage)
Puoi inserire un numero arbitrario di NULL valori in isPrimaryImage ma solo un valore non nullo per cliente.