2011-03-25 14 views
8

SQL Server 2008/2005¿La clave primaria SQL puede aceptar '0'?

Se me confunde entre Clave principal y Clave única.

Soy consciente de que la clave principal no permitirá NULL, mientras que Unique aceptará NULL. Además, una tabla puede tener 'n' número de claves únicas ..!

Si la clave principal permitirá cero?

+0

Simplemente un comentario informativo. esta pregunta también se aplica a 'mySql' – dhpratik

Respuesta

14

La clave principal puede ser cero, pero si establece la identidad en la columna, normalmente comenzará en 1 en lugar de cero.

+0

La clave principal tendrá Columna de identidad ... (Más probable o Más escenario) .. Entonces, ¿puedo asumir que, si hay una Columna de identidad, podemos comenzar la semilla/incremento en 0. Para comenzar con Cero en lugar de 1, ¿cómo hacer eso? – goofyui

+0

¿Por qué querrías comenzar el Incremento en cero de todos modos? Pero sí, empiece la semilla en cero, y luego incremente en uno para que sea IDENTIDAD (0,1) –

+0

¡Probé el escenario ...! Si no hay Identidad ..., la clave principal permitirá Zero ..! – goofyui

3

Sí. NULL es la ausencia de un valor. 0 es un valor.

+0

¿La clave primaria admite ZERO? – goofyui

+0

Sí. La clave principal admite ZERO – climbage

7

Una clave principal puede permitir 0 dependiendo del curso en el tipo de datos de la clave primaria. Un PK (Identidad) autogenerado puede comenzar en 0, pero ese no es el comportamiento predeterminado, deberá configurarlo para que comience en 0 (por supuesto, puede comenzar con números negativos si lo desea). Para obtener los mejores resultados, esto debe hacerse antes de comenzar a ingresar datos en la tabla.

Lo que no puede hacer es tener varios registros con un 0 como PK, ya que eso infringe el requisito de exclusividad del PK.

Si tiene datos existentes y quiere un registro que tiene un valor de cero para un propósito específico (por ejemplo, colocamos un usuario para nuestro proceso de importación, para que el campo insertby pueda mostrar que el registro proviene de una importación) , entonces lo que probablemente quiera es permitir una inserción manual en el campo de identidad, para que pueda ingresar este registro específico al valor que desee y luego volver a la configuración habitual. Esto se hace de esta manera:

set Identity_insert dbo.table1 ON 
insert dbo.table1 (id, myfield) 
Values (0, 'test') 
set Identity_insert dbo.table1 OFF 

No hacer esto en el código de producción aplicación, este es un tipo de administración del sistema de la tarea que se debe hacer solamente de vez en cuando, ya sea para la configuración de un registro en particular fuera del alcance de la normalidad datos o para insertar registros que se transfieren desde otra fuente (cuando usted sabe que sus valores de ID existentes no se utilizan actualmente). Esto no se debe usar a la ligera para evitar las restricciones de un campo de identidad. En particular, nunca debe usarse para completar registros en los que se omitió la identidad (debido a una eliminación o reversión) ya que esto frustra el propósito de usar una identidad y puede causar problemas de integridad si no se establecieron relaciones PK/FK adecuadas.

+0

Gracias por la explicación minuciosa y detallada, también esta es la única respuesta para mostrar CÓMO hacer lo que pidió OP, mientras explicaba POR QUÉ no hacerlo. ¡Brillante! – Rustavore

Cuestiones relacionadas