2011-07-13 12 views
25

Tengo una tabla de MySQL define:¿Cómo aplicar restricciones únicas en MySQL?

File 
-------------------------- 
ID int(11) PK 
name varchar(100) 
customerId int(11) FK 
isPrimaryImage tinyint(1) 
.... 


He leído aquí que MySQL no soporta un UNIQUE CONSTRAINT con una condición WHERE. Para cada customerId tendríamos solo una primaryImage = 1.

¿Qué más puedo hacer para aplicar esta restricción?

+0

Ver: http://stackoverflow.com/questions/2504007/mysql-unique-constraint-on-multiple-fields –

+0

Incluso si MySQL admite restricciones únicas, no puede usar una aquí (suponiendo que tendrá varias imágenes secundarias por cliente), ya que tendrá varias tuplas con el mismo ID de cliente e isPrimaryImage = 0 (pero podría usar NULL en lugar de 0 para esto). –

+0

El diseño de la mesa está desactivado, no puede aplicar lo que desee con dicho diseño. –

Respuesta

54

MySQL es perfectamente compatible con las limitaciones únicas.

No admite restricciones/índices parciales, por lo que deberá marcar imágenes no primarias con NULL en lugar de 0.

ALTER TABLE file ADD CONSTRAINT ux_file_customer_primary 
UNIQUE (customerId, isPrimaryImage) 

Puede insertar número arbitrario de valores en NULLisPrimaryImage pero sólo un valor no nulo por cliente.

+1

+1 Simple, inteligente y directo –

+0

limpio. Voy a intentarlo – kasdega

+0

@Quassnoi esto hace exactamente lo que necesitaba gracias. – kasdega

Cuestiones relacionadas