Extrait FRO PGSQL 8.4 DOCS: "[...] Une contrainte de colonne n'est qu'une commodité notionnelle à utiliser lorsque la contrainte n'affecte qu'une colonne." Comment ce SQL valide est alors alors?
DROP TABLE IF EXISTS test; CREATE TABLE test( id integer CONSTRAINT PK_test PRIMARY KEY CONSTRAINT nenull NOT NULL CHECK (id3>=id2) --the check constraint affects two columns none of which is id ,id2 integer , id3 integer );
4 Réponses :
ailleurs dans les docs . . . p>
Nous disons que les deux premières contraintes sont des contraintes de colonne, alors que Le troisième est une contrainte de table parce qu'elle est écrite séparément à partir de n'importe quelle définition de colonne. Les contraintes de colonne peuvent également être écrites En tant que contraintes de table, tandis que l'inverse n'est pas nécessairement possible, puisque une contrainte de colonne est
censée se référer forte> à la seule colonne Il est attaché à. ( PostgreSQL n'applique pas cette règle forte>, mais vous devrait le suivre si vous voulez que vos définitions de table fonctionnent avec d'autres Systèmes de base de données.) P> blockQuote>
Si la clé de la clé étrangère ou la principale contrainte de clé ne correspond à une seule colonne que vous avez le choix pour l'écrire de votre chemin ou comme ceci: mais si le PK ou le couvercle FK Plus d'une colonne, vous DO EM> utiliser la "contrainte de table" car je vous ai montré. P> Il n'y a plus de magie derrière celle-ci! P> P>
1) Contrainte de niveau de colonne forte> est déclarée au moment de la création d'une table, mais la contrainte de niveau de table est créée après la création de table. p>
2) 3) 4) Toutes les contraintes peuvent être créées au niveau de la table mais pour
Niveau de table NON NULL code> La contrainte ne peut pas être créé au niveau de la table fort> car toute contrainte donnera une vue logique à cette colonne particulière mais
non null code > Attribuera à la structure de la table elle-même. C'est pourquoi nous pouvons voir
pas NULL code> contrainte tout en décrivant le tableau, aucune autre contrainte ne sera vue. p>
Non NULL code> n'est pas autorisé. p>
S'attendre à ce que vous vus sur cela. p> NON NULL code> peut être attribué même après la création de la table à l'aide de la commande Alter Table. Je l'ai testé dans Oracle SQL + 10G em>. La syntaxe que j'ai utilisée est la suivante:
Alter Table Nom de table Modifier la colonneName Notnull; code> p>