Restricción única que permite valores vacíos en MySQL

125

Tengo un campo que almacena códigos de productos. Los códigos son únicos, pero algunos productos simplemente no tienen código. No puedo inventar códigos porque esos son códigos de proveedores.

¿Es posible este tipo de restricción en MySQL?

Soy un novato con procedimientos almacenados y desencadenantes, así que si la solución involucra uno de estos, tenga paciencia.

Actualización: la columna NO es nula. Por eso no pude hacer esto.

El desintegrador
fuente
@AmirAliAkbari Es curioso cómo estos dos se vinculan entre sí como "posible duplicado". Sin embargo, este es más viejo. :)
Pijusn

Respuestas:

182

Sí, usted puede hacer esto. Consulte la referencia de MySQL (versión 5.5) .

Un índice ÚNICO crea una restricción tal que todos los valores en el índice deben ser distintos. Se produce un error si intenta agregar una nueva fila con un valor clave que coincida con una fila existente. Para todos los motores, un índice ÚNICO permite múltiples valores NULL para columnas que pueden contener NULL.

EricC
fuente
8
Gracias. Tengo que hacerlo anulable
The Disintegrator
Tuve este problema en el modelo django. Hacer que funcione con nulos. Gracias
Shrey
13

Sí, si hace que la columna de código de producto sea anulable (no declarada con NOT NULL), la clave única permitirá múltiples filas con NULLcódigos de producto.

caos
fuente
Gracias. Tengo que hacerlo anulable
The Disintegrator
8

MySQL todavía permite que varias filas tengan un valor NULLen una columna única.

cg.
fuente
Gracias. Tengo que hacerlo anulable
The Disintegrator
@MianAnjum en negrita: CREATE TABLE table( keyint (11) NOT NULL AUTO_INCREMENT, fieldtinyint (1) DEFAULT NULL )
Paul Nowak