Définition de données
2024-10-04
SQL est un monde à part entière
On peut :
Interroger des données par des requêtes (déjà vu en partie)
Administrer les bases de données :
Créer celles-ci : définition des tables (schémas, etc), contraintes..
Créer de nouvelles données, en insérer, supprimer, mettre à jour, etc
Créer et gérer les utilisateurs, leurs droits sur les objets de la base,
…
Dans ce cours : création des tables (version simplifiée) et des données
CREATE TABLE ...
Permet de définir :
Les noms et les domaines (type) des attributs ainsi que des contraintes d’intégrité comme :
Contraintes de clés primaires (PRIMARY KEY
)
Contraintes référentielles (clés étrangères FOREIGN KEY
, par exemple)
Des contraintes assez générales (de contrôle des données)
Des index (pour la recherche et l’exécution efficaces)
Chaque relation est définie par un nom de relation et une liste d’attributs
CREATE TABLE <nom_relation> (
<element de relation>
<,element de relation>*
<,contrainte de relation>* );
Chaque attribut est défini par un nom d’attribut et un type de données
Schéma:
Valeurs par défaut
Pour dateliv
, c’est la date courante lors de l’insertion de la ligne dans la table
Pour quantite
, c’est une constante
world
world
avec clé primaire composéeAttention
Une clé peut être composée de plusieurs attributs
world
(suite)CREATE TABLE world.country (
countrycode bpchar(3) NOT NULL,
name_country text NOT NULL,
continent text NOT NULL,
region text NOT NULL,
surfacearea float4 NOT NULL,
indepyear int2 NULL,
population_country int4 NOT NULL,
lifeexpectancy float4 NULL,
gnp numeric(10, 2) NULL,
gnpold numeric(10, 2) NULL,
localname text NOT NULL,
governmentform text NOT NULL,
headofstate text NULL,
capital int4 NULL,
code2 bpchar(2) NOT NULL,
CONSTRAINT country_continent_check CHECK (
((continent = 'Asia'::text) OR (
continent = 'Europe'::text) OR
(continent = 'North America'::text) OR
(continent = 'Africa'::text) OR
(continent = 'Oceania'::text) OR
(continent = 'Antarctica'::text) OR
(continent = 'South America'::text))),
CONSTRAINT country_pkey PRIMARY KEY (countrycode)
);
Suppression n’est pas vidange
Supprimer une table, c’est supprimer son contenu (vidange) mais aussi son schéma
On peut gérer le contenu des tables directement dans le langage SQL
.
On peut donc :
Ajouter des tuples à une table : INSERT INTO ...
Mettre à jour des tuples d’une relation : UPDATE ...
Supprimer des tuples : DELETE FROM ...
Attention
NULL
INSERT INTO world.Country
(countrycode, name_country, continent,
region, surfacearea, indepyear, population_country,
lifeexpectancy, gnp, gnpold,
localname, governmentform, headofstate, capital, code2)
VALUES(
'SYL', 'Syldavia', 'Europe',
'Eastern Europe', 200000, 1918, 21345717, 81.2, 25213, 24878,
'Syldavie', 'Constitutional Monarchy', 'Ottokar II', 0, 'SY'
);
La dernière partie du constructeur multiligne, qui commence avec VALUES
est souvent appelée la liste de valeurs.
Une liste de valeurs peut être définie sans référene à une table existante et définir à la volée une nouvelle table virtuelle/éphémère.
+----------+--------------+--------+------------+------------+
| numliv | nomf | nomp | dateliv | quantite |
|----------+--------------+--------+------------+------------|
| 1 | fournisseur1 | x21 | 2019-07-13 | 2 |
| 2 | <null> | <null> | 2018-07-29 | 10 |
+----------+--------------+--------+------------+------------+
Rappel
NULL
.On peut faire une insertion par le biais d’une requête
La clause VALUES
est remplacée par une requête
Les résultats de la requête sont insérés comme valeurs dans la table
CREATE TABLE chaprot.city ()
INHERITS (world.city) ;
CREATE TABLE chaprot.country ()
INHERITS (world.country) ;
INSERT INTO chaprot.country (
SELECT *
FROM world.country
WHERE continent = 'Europe'
);
INSERT INTO chaprot.city (
SELECT ci.*
FROM world.city ci NATURAL JOIN
world.country co
WHERE co.continent = 'Europe'
) ;
On peut mettre à jour des tuples existants par le biais d’une requête
Le WHERE
permet de sélectionner les tuples à mettre à jour
On peut aussi effectuer des opérations sur les tuples à mettre à jour.
La clause <expression de valeur>
peut être :
NULL
Une constante (explicite ou via une requête)
Une expression arithmétique sur les attributs de la table à modifier
Augmentation du prix d’une pièce
DELETE FROM <table> USING <t> WHERE ...
Note
Souvent, lorsque vous supprimez des données d’une table, vous souhaitez supprimer ces données en fonction de leur présence dans un autre ensemble de données.
Spécifiez cet ensemble supplémentaire avec le prédicat USING
DELETE FROM <table> USING <t> WHERE ...
Astuce
Souvent, lorsque vous supprimez des données d’une table, vous souhaitez supprimer ces données en fonction de leur présence dans un autre ensemble de données.
Spécifiez cet ensemble supplémentaire avec le prédicat USING
Note
La requête suivante pose-t’elle problème ?
Peut-être !
Cela dépend des contraintes d’intégrité qui pèsent sur la base
On a vu comment créer des tables (de façon simplifiée) et gérer le contenu de celles-ci
On peut spécifier bien plus de contraintes dans la partie création de tables
L’ajout ou la suppression de données n’est pas libre : les contraintes (de clés notamment) doivent être satisfaites après l’exécution des mises à jours
SQL : Définition de données, Insertion, …
MA15Y030 – Bases de Données – L3 MIASHS – UParis Cité