CREATE TABLE et les types
L'instruction CREATE TABLE et les types de colonnes usuels (INTEGER, NUMERIC, VARCHAR, CHAR, DATE, TIMESTAMP, BOOLEAN), la clause DEFAULT : choisir un type et prévoir ce que la base stocke, transforme ou rejette.
- 22 cartes
- 4 thèmes
- Gratuit
Le programme, thème par thème
Le poids de chaque thème suit celui que lui donne l'examen.
- Notions
- Questions
- Ranger et relier
- Comprendre
Quelques cartes du deck
CREATE TABLE : de quoi s'agit-il ?
Voir la réponse
Instruction SQL qui crée une relation vide en nommant ses colonnes, chacune avec son type et ses éventuelles contraintes.
Elle ne définit que la structure : les lignes arrivent ensuite par INSERT.
CREATE TABLE produit (ref INTEGER, libelle VARCHAR(40))crée une table vide à deux colonnes.Que fait PostgreSQL de cet INSERT ?
```sql
CREATE TABLE produit (
ref INTEGER,
libelle VARCHAR(10),
prix NUMERIC(5,2)
);
INSERT INTO produit VALUES (1, 'Clavier', 1000.00);`- Il l'écarte,
numeric field overflow: 4 chiffres avant la virgule pour 3 permis - Il range 1000.00 tel quel, car la précision ne limite que le nombre de décimales
- Il range 999.99, la plus grande valeur que la colonne admette, sans prévenir
- Il l'écarte, car
Clavierdépasse les 10 caractères du libellé
Voir la réponse
Il l'écarte,
numeric field overflow: 4 chiffres avant la virgule pour 3 permisNUMERIC(5,2) laisse 5 - 2 = 3 chiffres à la partie entière : le maximum est 999.99. Le moteur ne plafonne jamais en silence, il lève
ERROR: numeric field overflow.Clavierfait 7 caractères, il tient dans VARCHAR(10).- Il l'écarte,
Une colonne NUMERIC(6,2) accepte au plus … chiffres avant la virgule et … chiffres après.
Voir la réponse
Une colonne NUMERIC(6,2) accepte au plus 4 chiffres avant la virgule et 2 chiffres après.
La précision 6 compte tous les chiffres, l'échelle 2 compte ceux de la partie décimale : il reste 6 - 2 = 4 chiffres pour la partie entière, donc 9999.99 au maximum.
Type de colonne : de quoi s'agit-il ?
Voir la réponse
Domaine des valeurs qu'une colonne peut contenir ; il décide de l'espace occupé et des opérations permises sur ces valeurs.
On additionne deux NUMERIC, on compare deux DATE, mais on n'additionne pas deux VARCHAR : la base applique à chaque colonne les règles de son type.
Pourquoi un code postal comme 01000 ne se range-t-il pas dans une colonne INTEGER, alors qu'il ne contient que des chiffres ?
- INTEGER est limité à quatre chiffres, ce qui est trop peu pour un code postal
- INTEGER refuse toute valeur qui commence par un zéro et lève alors une erreur
- Les chiffres d'un entier ne peuvent pas être comparés un à un avec ceux d'un autre
- Un entier n'a pas de zéro initial : 01000 deviendrait 1000
Voir la réponse
Un entier n'a pas de zéro initial : 01000 deviendrait 1000
La base lit '01000' comme l'entier 1000 et range 1000 : le zéro est perdu. Un code postal, un numéro de téléphone ou un identifiant ne servent à aucun calcul : on les stocke en CHAR(5) ou en VARCHAR.