129 votes

Définition d'une colonne SQL : valeur par défaut et not null redondants ?

J'ai vu à plusieurs reprises la syntaxe suivante qui définit une colonne dans une déclaration DDL de création/modification :

ALTER TABLE tbl ADD COLUMN col VARCHAR(20) NOT NULL DEFAULT "MyDefault"

La question est la suivante : puisqu'une valeur par défaut est spécifiée, est-il nécessaire de préciser également que la colonne ne doit pas accepter les NULL ? En d'autres termes, DEFAULT ne rend-il pas NOT NULL redondant ?

0voto

Roland Points 787

Dans le cas d'Oracle depuis 12c vous avez DEFAULT ON NULL ce qui implique une NOT NULL contrainte.

ALTER TABLE tbl ADD (col VARCHAR(20) DEFAULT ON NULL 'MyDefault');

ALTER TABLE

ON NULL

Si vous spécifiez la clause ON NULL, la base de données Oracle attribue à la variable valeur de la colonne DEFAULT lorsqu'une instruction INSERT ultérieure tente d'attribuer d'attribuer une valeur dont l'évaluation est NULL.

Lorsque vous spécifiez ON NULL, la contrainte NOT NULL et l'état de contrainte NOT DEFERRABLE sont implicitement spécifiés. Si vous spécifiez une en ligne qui entre en conflit avec NOT NULL et NOT DEFERRABLE, une erreur erreur est générée.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X