11
votes

La clé primaire SQL peut accepter '0'?

SQL Server 2008/2005

Je suis confondu entre la clé primaire et unique.

Je suis conscient que la clé primaire ne permettra pas NULL, tandis qu'un unique acceptera NULL. En outre, une table peut avoir 'n' nombre de clés uniques ..!

si la clé primaire permettra de zéro?


1 commentaires

Juste un commentaire informatif. Cette question est également applicable à mysql


4 Réponses :


4
votes

Oui. Null est l'absence d'une valeur. 0 est une valeur.


2 commentaires

Les principales principales appuient-elles zéro?


Oui. La clé principale prend en charge zéro



17
votes

La clé primaire peut être nulle, mais si vous définissez l'identité sur la colonne, elle commencera normalement à 1 au lieu de zéro.


4 commentaires

La clé primaire aura une colonne d'identité .. (probable ou la plupart des scénarios) .. alors puis-je supposer, s'il y a une colonne d'identité, nous pouvons commencer la graine / incrémentation de 0. Pour commencer par zéro au lieu de zéro au lieu de 1, comment faire ça?


Pourquoi voudriez-vous commencer l'incrément à zéro quand même? Mais oui, commencez la graine à zéro, puis incrémentez-la de ce que ce serait une identité (0,1)


J'ai testé le scénario ..! S'il n'y a pas d'identité .., primaryKey permettra zéro ..!


Yeh c'est correct. Comme je l'ai dit dans ma réponse initiale indiquant que "la clé primaire peut être zéro"



11
votes

Une clé primaire peut permettre à 0 en fonction du parcours du type de données de la clé primaire. Un pc autogogené (identité) peut commencer à 0 mais ce n'est pas le comportement par défaut, vous devrez le configurer pour démarrer à 0 (Heck, vous pouvez commencer par des numéros négatifs si vous le souhaitez). Pour de meilleurs résultats, cela devrait être fait avant de commencer à entrer des données à la table.

Ce que vous ne pouvez pas faire, c'est avoir plusieurs enregistrements avec un 0 comme le PK que cela viole la nécessité d'unicité de la PK.

Si vous avez des données existantes et que vous souhaitez une valeur de zéro pour Un objectif spécifique (par exemple, nous mettons dans un utilisateur pour notre processus d'importation, le champ INSERTEDBY pourrait montrer que l'enregistrement provenait d'une importation), alors ce que vous voulez probablement, c'est autoriser une insertion manuelle dans le champ Identité, afin que vous puissiez ainsi Entrez cet enregistrement spécifique à la valeur souhaitée, puis revenez au paramètre habituel. Ceci est fait de cette façon: xxx

ne le fais pas dans le code de production de l'application, il s'agit d'un type d'administrateur système qui ne devrait être effectué que de temps en temps pour le réglage d'un enregistrement particulier en dehors de la portée des données normales ou aux dossiers d'insertion de transfert d'une autre source (si vous connaissez leurs valeurs id existantes sont actuellement inutilisés). Cela ne devrait pas être légèrement utilisé pour contourner les restrictions d'un champ d'identité. En particulier, il ne faut jamais être utilisé pour remplir des enregistrements dans lesquels l'identité a sauté (en raison d'une suppression ou d'une annulation), car cela défait le but d'utiliser une identité et peut entraîner des problèmes d'intégrité des données si des relations PK / FK appropriées n'étaient pas configurées. < / p>


1 commentaires

Merci pour l'explication approfondie et détaillée, il s'agit également de la seule réponse à montrer comment faire ce que l'OP a demandé, tout en expliquant pourquoi ne pas le faire. Brillant!



0
votes

Oui, vous pouvez définir une colonne avec une valeur par défaut de 0 en tant que clé étrangère. Cependant, pour que la contrainte au travail, vous auriez besoin d'une ligne dans la table source avec une valeur de 0 aussi. ... vous pouvez insérer l'enregistrement d'identifiant 0 principal dans la table principale.


0 commentaires