2010-02-18 8 views
5

Estoy usando un servidor MySQL 5.0. Mi requisito es agregar una fila especial a una tabla existente que tenga una clave primaria de incremento automático.¿Puedo usar cero en una columna que tenga el atributo AUTO_INCREMENT

Sería muy útil para el futuro mantenimiento y gestión del proyecto si pudiéramos hacer la identificación de esta fila 0 (porque es fácil de recordar y fácil de detectar en observaciones manuales).

Ahora, sé que MySQL no tiene ningún problema con que use su propio valor para una columna de autoincremento, y mis pruebas han demostrado que puedo establecer la clave primaria autoincrement de una fila en una consulta UPDATE. Sin embargo, se han planteado algunas preocupaciones acerca de cómo esto podría afectar la funcionalidad de autoincremento de la columna en futuros INSERT.

Mis (limitados) experimentos no han mostrado nada extraño y no encuentro ninguna advertencia específica contra esto en los documentos de MySQL. Es decir, aparte de esto (el énfasis es mío): http://dev.mysql.com/doc/refman/5.0/en/create-table.html

Sólo puede haber una columna AUTO_INCREMENT por tabla, debe ser indexado, y no puede tener un valor por defecto. Una columna AUTO_INCREMENT funciona correctamente solo si contiene solo valores positivos. Insertar un número negativo se considera como insertar un número positivo muy grande. Esto se hace para evitar problemas de precisión cuando los números “” más de positivo a negativo y también para asegurarse de que no obtiene accidentalmente una columna AUTO_INCREMENT que contenga 0.

Soy incapaz de encontrar una explicación para ¿Qué hay de malo en tener un valor de cero en una columna AUTO_INCREMENT? Entonces, ¿alguien puede decirme si tener una columna AUTO_INCREMENT que contenga 0 es algo malo?

Respuesta

2

Como ya ha descubierto, no es posible asignar un 0 a un campo de incremento automático con un INSERT, necesita usar una ACTUALIZACIÓN. AFAIK no tiene nada de malo tener un 0 en una fila, excepto cuando intenta volcar e importar. Pero eso se puede evitar insertando primero los datos y luego marcándolos como un campo de incremento automático.

+0

Buena llamada en una reimportación. No lo había considerado porque no hacemos eso a menudo, pero tomaremos nota de eso en caso de que lo hagamos. Por lo que yo sé, no hay nada de malo en 0 en una columna de incremento automático tampoco :). Pero esa nota que cité sugiere lo contrario, así que esperaba obtener una respuesta que explica por qué el manual de referencia dice eso o por qué podría estar equivocado. ¿Qué tan seguro está de que no hay nada de malo en 0 en una columna de incremento automático? –

+0

Estoy bastante seguro de que estarás bien. Esta vez sí tuve un 0 en un campo de autoincrement debido a un error en mi código, no tenía ningún efecto secundario adverso. – e4c5

1

Almacenar 0 no es una práctica recomendada. Por ejemplo, si vuelca la tabla con mysqldump y luego la vuelve a cargar, MySQL genera normalmente nuevos números de secuencia cuando encuentra los valores 0, lo que da como resultado una tabla con contenidos diferentes a la que se descargó. Habilitar NO_AUTO_VALUE_ON_ZERO antes de volver a cargar el archivo de volcado resuelve este problema. mysqldump ahora automáticamente incluye en su salida una declaración que habilita NO_AUTO_VALUE_ON_ZERO, para evitar este problema.

Cuestiones relacionadas