Colonnes MySQL avec un choix de style null par défaut, ou est-ce?
Dans de nombreuses saveurs de SQL, il y a trois façons dont vous pouvez implicitement la valeur d'une colonne NULLE sur chaque ligne d'insertion. Ce sont
columnname type NULL
columnname type DEFAULT NULL
columnname type NULL DEFAULT NULL
la première définit l'indicateur NULL (par opposition à NON NULLE), le second, les feuilles de l'indicateur NULL la valeur par défaut, et le troisième définit l'indicateur NULL et définit implicitement une valeur NULLE.
J'ai entendu parler dans Microsoft SQL, la deuxième variation est pas exactement le même puisque vous pouvez également personnaliser la valeur par défaut de l'indicateur NULL pour les tableaux ou des schémas.
Mais pour MySQL, je ne crois pas qu'il y est une telle fonctionnalité. En outre, dans MySQL, les colonnes avec l'indicateur NULL, contrairement à PAS NULL colonnes, sont toujours implicitement la valeur NULL à insérer si il n'y a pas de valeur explicite, même si le mode strict est activé. De sorte que les feuilles toutes ces colonne déclarations identiques.
Dans mon MySQL script, pour chaque colonne not NULL, - je spécifier une valeur par DÉFAUT pour les colonnes je ne m'attends pas à des insertions dans mon application, afin d'éviter tout problème si je devais activer le mode strict. Donc, je pense qu'il serait plus symétrique, si je devais choisir la troisième variation, même si il est le niveau le plus détaillé et explicite. Sont des déclarations comme la troisième variation commun, ou est-ce la première ou la deuxième variation de se produire plus fréquemment chez les autres scripts?
J'envisageais de penchant pour la seconde approche, parce que c'est l'alias de dump MySQL utilise, mais je ne suis pas sûr que ce soit une bonne idée car elle exporte également les littéraux entiers comme des chaînes de caractères (entre guillemets simples) dans des clauses de défaut de la colonne déclarations.
Cette question peut paraître plus l'opinion que celui qui a une solution, mais je veux aussi être au courant des éventuels problèmes que je ne suis pas au courant. J'ai peut choisir de migrer de MySQL vers PostgreSQL dans l'avenir, et je pouvais aussi utiliser quelques conseils de ces experts, par exemple, si PostgreSQL distingue ces cas comme MS-SQL. Corrigez-moi si je me trompe, si j'ai fait toutes les hypothèses incorrectes.
source d'informationauteur Kevin Jin
Vous devez vous connecter pour publier un commentaire.
Chaque base de données que j'ai rencontré traite les valeurs Null de la façon que vous décrivez. Lorsqu'une colonne accepte les valeurs NULL, puis de ne pas fournir une valeur à INSÉRER les valeurs par défaut la valeur NULL. Je crois que c'est la partie de la norme ANSI comportement.
Comme pour la spécification de la valeur "NULL". C'est une question de préférence. La norme ne dire qu'une colonne autorise les valeurs Null sauf PAS la valeur NULL est spécifiée (au niveau du langage de définition de données). Donc, la valeur NULL est lui-même unnecesary, et vous avez un quatrième, l'équivalent de l'option:
Les valeurs null sont tout à fait intégrés dans le langage SQL par le biais de la norme ANSI. Votre troisième option est la plus explicite, mais il semble aussi un peu inhabituel.
Si vous prévoyez d'être constant tout au long de votre système, alors je prendrais le chemin sur lequel vous êtes. Pour chaque colonne de chaque table ont la valeur NULL ou not NULL. Pour toutes les colonnes qui prennent des valeurs par défaut, ont le DÉFAUT de déclaration.
Cependant, ne vous attendez pas à d'autres personnes qui travaillent avec vous (maintenant ou dans l'avenir) pour facilement suivre cet exemple. Beaucoup préfèrent la quatrième option, dans ce cas, tout simplement parce qu'il exige moins de dactylographie et de tous (ou presque tous) les langages SQL se comporter.
Comme indiqué sous Type De Données Valeurs Par Défaut:
(Je pense qu'ils voulaient dire implicitepas explicite).
En outre, comme indiqué sous
CREATE TABLE
Syntaxe:Par conséquent, MySQL à la colonne suivante définitions sont toutes identiques:
Le choix de l'utiliser, c'est un équilibre entre le fait d'être explicite, et la concision. Selon les circonstances, je pourrais utiliser tout ce qui précède.