2012-07-03 21 views

Respuesta

2

Dado que está utilizando el motor de almacenamiento MyISAM (o INNODB), la respuesta breve es no. Varias cadenas vacías no funcionarán para la restricción de índice única, aunque sí lo harían varios valores nulos. Su mejor opción si quiere una solución solo SQL, es crear un índice regular en el campo ISBN y luego usar un procedimiento almacenado para actuar como un proxy de inserción, uno que verifica la unicidad si no es nulo o está vacío.

Si solo los nulos trabajo por usted, aquí es un básico crear:

CREATE TABLE `books` (
    `id` int(11) unsigned NOT NULL AUTO_INCREMENT, 
    `isbn` int(13) DEFAULT NULL, 
    PRIMARY KEY (`id`), 
    UNIQUE KEY `isbn` (`isbn`) 
) 

Sólo una nota ... Recuerde que el '13' especificado para int es sólo el número de dígitos que se mostrará al volver en una consulta, no el tamaño del número entero.

+1

Estoy bien con tener NULL. para configurar esto, ¿simplemente configuraría INT (13) DEFAULT NULL y eso debería funcionar? – nick

+1

@nick Sí, vea mi declaración de creación que agregué en la pregunta anterior, también puede usarla en ALTER TABLE. – Ray

3

se puede usar algo como esto,

ALTER TABLE nombre_tabla ADD index_name único (column_list):

Esta sentencia crea un índice para el que los valores deben ser únicos (con la excepción de los valores NULL, lo que puede aparecer varias veces). Consulte MySQL INDEXES.

Cuestiones relacionadas