Le champ en question est soit saisi par l'utilisateur, soit automatiquement calculé et validé dans un trigger. Dans tous les cas la valeur ne sera jamais à NULL au final.
Alors pourquoi ne pas mettre "NOT NULL" ? Parce que (malheureusement? peut etre, je ne connais pas le comportement des autres SGBDs) sous mysql les triggers sont incompatibles avec les champs not null , dans un certain sens:
L'application de la contrainte NOT NULL se fait avant l'execution du trigger BEFORE de la table.
Si on définit un champ "NOT NULL", et qu'on ne le spécifie pas dans la requete d'insertion, puisque de toute facçon le trigger va le définir, mysql rejette quand même l'insertion à cause de la contrainte NOT NULL.
Au début je croyais que mysql exécutait le trigger before, et une fois celui ci terminé, validait les contraintes sur les champs comme le NOT NULL, mais en fait non. Le trigger s'execute après que mysql aie vérifié que les valeurs de l'INSERT correspondent aux contraintes.
C'est bête, ça oblige à mettre des NULLs qui en fait sont des NOT NULL.
D'ailleurs si quelqu'un connait le comportement de pgsql ou d'autres SGBDs dans ce genre de cas...
[^] # Re: comparons ce qui est comparable
Posté par Axel . En réponse au message comparaison de chaines et mysql. Évalué à 2.
Le champ en question est soit saisi par l'utilisateur, soit automatiquement calculé et validé dans un trigger. Dans tous les cas la valeur ne sera jamais à NULL au final.
Alors pourquoi ne pas mettre "NOT NULL" ? Parce que (malheureusement? peut etre, je ne connais pas le comportement des autres SGBDs) sous mysql les triggers sont incompatibles avec les champs not null , dans un certain sens:
L'application de la contrainte NOT NULL se fait avant l'execution du trigger BEFORE de la table.
Si on définit un champ "NOT NULL", et qu'on ne le spécifie pas dans la requete d'insertion, puisque de toute facçon le trigger va le définir, mysql rejette quand même l'insertion à cause de la contrainte NOT NULL.
Au début je croyais que mysql exécutait le trigger before, et une fois celui ci terminé, validait les contraintes sur les champs comme le NOT NULL, mais en fait non. Le trigger s'execute après que mysql aie vérifié que les valeurs de l'INSERT correspondent aux contraintes.
C'est bête, ça oblige à mettre des NULLs qui en fait sont des NOT NULL.
D'ailleurs si quelqu'un connait le comportement de pgsql ou d'autres SGBDs dans ce genre de cas...