CodeGym /Cours /SQL SELF /Utilisation de DEFAULT pour les valeurs par défaut

Utilisation de DEFAULT pour les valeurs par défaut

SQL SELF
Niveau 17, Leçon 2
Disponible

Parfois, on n'a pas envie de remplir tous les champs à la main — la flemme ou juste pas les infos sous la main. Dans ces cas-là, tu peux définir à l'avance des valeurs par défaut, comme ça la base les mettra toute seule quand il faut.

Insertion de lignes dans une table

Valeurs par défaut c'est super lié à l'insertion de lignes dans une table. Donc là je vais t'en parler vite fait, et dans quelques chapitres on reviendra dessus pour creuser un peu plus.

Ajouter des lignes dans une table, c'est super simple - il y a une commande spéciale pour ça : INSERT INTO. INSERT INTO — c'est un opérateur SQL qui ajoute de nouvelles lignes dans une table. C'est un des plus utilisés, surtout quand tu bosses avec des formulaires web, des logs, l'inscription d'utilisateurs ou la mise à jour de données.

Syntaxe de la commande

INSERT INTO table (colonne1, colonne2, ...)
VALUES (valeur1, valeur2, ...);

Explications :

  • table — le nom de la table où tu ajoutes les données.
  • colonne1, colonne2, ... — la liste des colonnes (tu peux zapper si tu mets des valeurs pour toutes les colonnes dans le bon ordre).
  • valeur1, valeur2, ... — les valeurs qui vont dans les colonnes listées.

Exemple simple

INSERT INTO users (name, email)
VALUES ('Alice', 'alice@example.com');

Ça ajoute une ligne dans la table users : nom — "Alice", email — "alice@example.com".

Résultat :

id name email
1 Alice alice@example.com

Insertion de plusieurs lignes d'un coup

Tu peux aussi insérer plusieurs enregistrements en une seule requête — c'est plus rapide et plus efficace.

INSERT INTO users (name, email)
VALUES 
  ('Alice', 'alice@example.com'),
  ('Bob', 'bob@example.net'),
  ('Charlie', 'charlie@example.org'),
  ('Diana', 'diana@example.com'),
  ('Eve', 'eve@example.net');

Et voilà le résultat :

id name email
1 Alice alice@example.com
2 Bob bob@example.net
3 Charlie charlie@example.org
4 Diana diana@example.com
5 Eve eve@example.net

Valeur par défaut

Tu te souviens de la syntaxe pour ajouter des lignes ?

INSERT INTO table (colonne1, colonne2, ...)
VALUES (valeur1, valeur2, ...);

Tu te demandes peut-être pourquoi on met la liste des colonnes : colonne1, colonne2 ? On pourrait juste mettre les valeurs dans le même ordre que les colonnes de la table, non ?

En fait, il y a plein de valeurs que tu n'es pas obligé de préciser quand tu ajoutes des données. Par exemple, l'ID d'une nouvelle ligne, PostgreSQL va le calculer tout seul. Pareil pour la date/heure d'ajout, il peut la mettre automatiquement dans la colonne correspondante. Si tu ne donnes pas certaines infos, PostgreSQL va mettre NULL à la place.

PostgreSQL peut faire plein de trucs utiles pour toi. Et tu peux contrôler ça — c'est pour ça qu'il y a les valeurs par défaut, qu'on définit avec le mot-clé DEFAULT.

La valeur par défaut s'applique si tu n'indiques rien pour une colonne quand tu ajoutes une ligne. Ça te fait gagner du temps et ça évite les erreurs bêtes, genre oublier une info importante.

Comment marche DEFAULT ?

Voyons la syntaxe. Les valeurs par défaut se définissent quand tu crées la table. Voilà le format général :

CREATE TABLE table (
    colonne type_de_donnée DEFAULT valeur_par_défaut
);

Ou, si tu veux ajouter une valeur par défaut à une table qui existe déjà :

ALTER TABLE table
ALTER COLUMN colonne
SET DEFAULT valeur_par_défaut;

Je t'expliquerai plus en détail comment modifier les tables dans quelques cours :P

Exemple 1 : Table avec un champ DEFAULT

On va créer une table students où chaque étudiant aura automatiquement une date d'inscription :

CREATE TABLE students (
    id SERIAL PRIMARY KEY,
    name VARCHAR(100) NOT NULL,
    registration_date DATE DEFAULT CURRENT_DATE
);

Maintenant, quand tu ajoutes un nouvel étudiant sans préciser registration_date, PostgreSQL va remplir ce champ avec la date du jour.

INSERT INTO students (name) VALUES ('Alex Lin');

Si tu fais la requête :

SELECT * FROM students;

Tu obtiendras ce résultat :

id name registration_date
1 Alex Lin 2023-10-15

Exemples pratiques

Valeur par défaut pour une colonne numérique

Imaginons qu'on a une table grades, où la colonne grade doit avoir la valeur par défaut 0 si la note n'est pas encore mise.

CREATE TABLE grades (
    id SERIAL PRIMARY KEY,
    student_id INTEGER NOT NULL,
    course_id INTEGER NOT NULL,
    grade INTEGER DEFAULT 0
);

On ajoute un enregistrement sans préciser grade :

INSERT INTO grades (student_id, course_id) VALUES (1, 101);

La table ressemblera à ça :

id student_id course_id grade
1 1 101 0

Utilisation de TEXT avec une valeur par défaut

Imagine une table teachers, où chaque prof a automatiquement le statut «non vérifié» quand il est ajouté.

CREATE TABLE teachers (
    id SERIAL PRIMARY KEY,
    name VARCHAR(100) NOT NULL,
    status TEXT DEFAULT 'non vérifié'
);

On ajoute un prof sans préciser le statut :

INSERT INTO teachers (name) VALUES ('Peter Pall');

Le résultat sera :

id name status
1 Peter Pall non vérifié

Valeurs par défaut pour l'heure

Pour la table meetings, qui stocke les infos sur les réunions, tu peux mettre un champ meeting_time avec l'heure de début standard : 10:00 du matin.

CREATE TABLE meetings (
    id SERIAL PRIMARY KEY,
    topic VARCHAR(100),
    meeting_time TIME DEFAULT '10:00'
);

On ajoute un enregistrement :

INSERT INTO meetings (topic) VALUES ('Discussion du projet');

Résultat :

id topic meeting_time
1 Discussion du projet 10:00

Erreurs classiques avec DEFAULT

Type de donnée de la valeur par défaut incorrect. Si tu essaies de mettre une valeur texte dans une colonne numérique, PostgreSQL va râler :

CREATE TABLE example (
    number INTEGER DEFAULT 'texte'
);

Erreur : invalid input syntax for type integer.

Changer DEFAULT sans penser aux enregistrements existants. Quand tu modifies la valeur par défaut, ça ne change rien pour les lignes déjà présentes — elles gardent l'ancien comportement. Si tu veux mettre à jour les lignes existantes, utilise UPDATE.

UPDATE students SET registration_date = '2023-01-01' WHERE registration_date IS NULL;

Confusion entre DEFAULT et NOT NULL. Une valeur par défaut ne veut pas dire que le champ est forcément obligatoire (NOT NULL). Si tu ne mets pas explicitement NOT NULL, la colonne peut prendre la valeur NULL.

2
Mission
SQL SELF, niveau 17, leçon 2
Bloqué
Création d'une table en utilisant `DEFAULT` pour une valeur numérique
Création d'une table en utilisant `DEFAULT` pour une valeur numérique
2
Mission
SQL SELF, niveau 17, leçon 2
Bloqué
Utilisation de plusieurs colonnes avec une valeur `DEFAULT`
Utilisation de plusieurs colonnes avec une valeur `DEFAULT`
Commentaires
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION