2010-06-21 22 views
9

He notado que si tengo una clave compuesta única para dos columnas, column_a y column_b, entonces mi sql ignora esta restricción si una columna es nula.Claves compuestas MySql y valores nulos

E.g.

si column_a = 1 y column_b = null puedo insertar column_a = 1 y column_b = null tanto como me gusta

si column_a = 1 y column_b = 2 I sólo puede insertar este valor una vez.

¿Hay alguna manera de aplicar esta restricción, aparte de cambiar las columnas a No nulo y establecer los valores predeterminados?

Respuesta

13

http://dev.mysql.com/doc/refman/5.0/en/create-index.html

"Un índice único crea una restricción de tal manera 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 coincide con una fila existente. Esta restricción no se aplica a valores NULL excepto para el motor de almacenamiento BDB. Para otros motores, un índice UNIQUE permite valores NULL múltiples para columnas que pueden contener NULL. "

Así que, no, no puede obtener MySQL para tratar NULL como un valor único. Supongo que tiene un par de opciones: podría hacer lo que sugirió en su pregunta y almacenar un "valor especial" en lugar de nulo, o podría usar el motor BDB para la tabla. Sin embargo, no creo que esta pequeña diferencia en el comportamiento garantice la elección inusual de un motor de almacenamiento.

+0

¡Gracias Hammer! Sí, almacenar un valor especial no dolerá demasiado y definitivamente es una mejor opción para mí que cambiar el mecanismo de almacenamiento. – stevebot

Cuestiones relacionadas