• Aucun résultat trouvé

Migration de serveur de bases de données

N/A
N/A
Protected

Academic year: 2022

Partager "Migration de serveur de bases de données"

Copied!
16
0
0

Texte intégral

(1)

BTS SIO - SISR

Travaux Pratiques

Migration de serveur de bases de données

Nginx, PHP, mySQL & phpMyAdmin

TABLE DES MATIERES

Présentation ... 1

Nginx ... 2

PHP ... 2

mySQL – mariaDB ... 2

Wordpress ... 2

phpMyAdmin ... 3

Préparation de l’environnement ... 3

Installation de nginx ... 3

Installation de PHP (php-fpm) ... 6

Installation du Serveur Mysql (mariaDB) ... 7

Installation d’un package CMS (Wordpress) ... 8

Installation de phpMyAdmin ... 8

Migration du serveur de base de données ... 12

Création d’un nouveau serveur MySQL ... 12

Ajout du serveur à la console phpMyAdmin ... 13

Mise en maintenance du site ... 14

Transfert de la base de données ... 15

Dump de la base de données ... 15

Import du fichier dump sur le serveur dédié ... 15

Pour aller plus loin ... 16

PRESENTATION

La séquence de travaux pratiques ci-dessous va nous conduire à produire un serveur WEB complet, comprenant un serveur http (nginx), un moteur de script associé (PHP) et une base de données (mariaDB). On appelle généralement ce genre de package un serveur LEMP (Linux EngineX MySQL PHP).

Nous validerons le fonctionnement du serveur en y installant un CMS Wordpress, ainsi que l’outil phpMyAdmin.

Enfin, nous procéderons au déménagement de la base de données sur un serveur dédié.

(2)

NGINX

Nginx est un serveur HTTP et reverse proxy open source hautes performances sur lequel reposent certains des plus grands sites WEB. Nginx peut être utilisé comme serveur Web autonome et comme proxy inverse pour Apache et d'autres serveurs Web. Par

rapport à Apache, qui est la solution historique, Nginx peut gérer un très grand nombre de connexions simultanées et a une empreinte mémoire plus petite par connexion. C'est depuis avril 2019, le serveur web le plus utilisé au monde.

PHP

PHP est l’acronyme récursif de « PHP : Hypertext Preprocessor ». C’est un langage de programmation libre, principalement utilisé pour produire des pages Web dynamiques via un serveur HTTP, mais pouvant également fonctionner comme n'importe quel langage interprété de façon locale. PHP est un langage impératif orienté objet.

PHP a permis de créer un grand nombre de sites web célèbres, comme Facebook, Wikipédia, etc. Il est considéré comme une des bases de la création de sites web dits dynamiques mais également des applications web.

MYSQL – MARIADB

MySQL est un système de gestion de bases de données relationnelles (SGBDR).

Il est distribué sous une double licence GPL et propriétaire. Il fait partie des logiciels de gestion de base de données les plus utilisés au monde, autant par le grand public (applications web principalement) que par des professionnels, en concurrence avec Oracle, PostgreSQL et Microsoft SQL Server. Son nom vient du prénom de la fille du cocréateur Michael Widenius, « My ». SQL fait

référence au Structured Query Language, le langage de requête utilisé. MySQL a été acheté le 16 janvier 2008 par Sun Microsystems lui-même acquis ensuite par Oracle Corporation.

Depuis mai 2009, son créateur Michael Widenius a créé MariaDB (Maria est le prénom de sa deuxième fille) pour continuer son développement en tant que projet Open Source.

WORDPRESS

WordPress est un système de gestion de contenu (content management system (CMS) en anglais) gratuit, libre et open- source. Ce logiciel écrit en PHP repose sur une base de données MySQL et est distribué par l'entreprise américaine Automattic. Les fonctionnalités de WordPress lui permettent

de créer et gérer différents types de sites Web : site vitrine, site de vente en ligne, site applicatif, blogue, ou encore portfolio. Il est distribué selon les termes de la licence GNU GPL version 2. Le logiciel est aussi à l'origine du service WordPress.com.

En octobre 2019, WordPress est utilisé par 34,7 % des sites web dans le monde, ses concurrents directs sont à 2,7 % (Joomla) et à 1,7 % (Drupal) tandis que 43,6 % des sites n'utilisent pas de système de gestion de contenu3.

(3)

PHPMYADMIN

phpMyAdmin (PMA) est une application Web de gestion pour les systèmes de gestion de base de données MySQL réalisée principalement en PHP et distribuée sous licence GNU GPL. Il s'agit de l'une des plus célèbres interfaces pour gérer une base de données MySQL sur un serveur PHP. De nombreux hébergeurs, gratuits comme payants, le proposent ce qui évite à l'utilisateur d'avoir à l'installer.

Cette interface pratique permet d'exécuter, très facilement et sans grandes connaissances en bases de données, des requêtes comme les créations de table de données, insertions, mises à jour, suppressions et modifications de structure de la base de données, ainsi que l'attribution et la révocation de droits et l'import/export. Ce système permet de sauvegarder commodément une base de données sous forme de fichier .sql et d'y transférer ses données, même sans connaître SQL.

(Sources : wikipedia.org)

PREPARATION DE L’ENVIRONNEMENT

Pour réaliser notre serveur, il nous suffit d’un simple VM dédiée Debian10 x64 (mode console), bridgée sur le réseau local.

On se logue en root, et on opère les mises à jour habituelles :

# apt update

# apt upgrade

# apt -y install curl wget sudo

# adduser abcd sudo

(« abcd » est l’id utilisateur qui doit disposer de droits « sudoer »).

On se délogue (CTRL+D), et on se relogue avec cet utilisateur sudoer.

On va repérer l’adresse IP de notre serveur :

$ ip -c a

PS : cette adresse aura été obtenue par DHCP ; bien entendu, dans un environnement réel, il faudrait fixer cette adresse, et par ailleurs, utiliser des mots de passe beaucoup plus complexes que ceux que nous allons utiliser ici.

INSTALLATION DE NGINX

Nous avons déjà abordé nginx lors de précédents travaux. On l’installe tout simplement avec ;

$ sudo apt install nginx

(4)

On peut dès lors tester le fonctionnement depuis le navigateur de la machine hôte :

Ou encore depuis le serveur lui-même :

$ curl -I 127.0.0.1

HTTP/1.1 200 OK

Server: nginx/1.nn.nn

Date: Mon, XX Mmm AAAA 22:29:02 GMT Content-Type: text/html

Content-Length: 612

Last-Modified: Mon, XX Mmm AAAA 22:27:54 GMT Connection: keep-alive

ETag: "5b847aea-264"

Accept-Ranges: bytes

NB : on s’aperçoit que dans sa réponse, nginx donne un certain nombre d’information, notamment le fait que le serveur soit effectivement nginx, et la version utilisée. C’est typiquement ce genre d’information qui est repérée lors de la recherche (malveillante) de failles de sécurité.

Nous utilisons la configuration par défaut du serveur comme référence pour notre exemple :

$ cd /etc/nginx/sites-available

$ sudo cp default monsite

$ sudo nano monsite

(5)

Nous modifions notre configuration ainsi (il suffit de décommenter et/ou modifier certaines options du fichier de base) :

server {

# écoute sur le port 80 de l'IPv4 du serveur : listen 80 default_server;

# écoute sur le port 80 de l'IPv6 du serveur : listen [::]:80 default_server;

#Définir le répertoire racine du site internet : root /var/www/html ;

# Définir l'ordre d'exécution des index (par priorité) index index.php index.html index.htm ;

server_name _;

# essaye la requête ($uri) comme fichier, puis comme répertoire # en cas d’échec, erreur http 404

location / {

try_files $uri $uri/ =404;

}

# on active le PHP comme moteur de script du serveur : location ~ \.php$ {

include snippets/fastcgi-php.conf;

fastcgi_pass unix:/run/php/php7.3-fpm.sock ; }

}

Activons cette nouvelle configuration en créant un lien symbolique du fichier vers le répertoire activé pour les sites :

$ sudo ln -s /etc/nginx/sites-available/monsite /etc/nginx/sites-enabled/

Il faut ensuite désactiver le site par défaut (on supprime le lien symbolique de la configuration default) :

$ cd /etc/nginx/sites-enabled

$ sudo rm default

Enfin, testons la configuration Nginx pour vérifier si la syntaxe globale est correcte :

$ sudo nginx -t

S'il n'y a pas d'erreur, la sortie ressemblera à ceci :

nginx: the configuration file /etc/nginx/nginx.conf syntax is ok nginx: configuration file /etc/nginx/nginx.conf test is successful

(6)

Il nous reste à redémarrer nginx :

$ sudo systemctl restart nginx

Un peu d’analyse …

Rafraîchir la page du navigateur web qui pointe vers le serveur. Quel est le message obtenu ? pourquoi ? Créer dans le dossier racine du site (/var/www/html) un fichier nommé index.html, contenant quelque chose du genre « ok ! salut ! »

Rafraîchir la page du navigateur web qui pointe vers le serveur. Quel est le message obtenu ? pourquoi ? Créer toujours dans le dossier racine du site un autre fichier nommé index.php, contenant quelque chose du genre

« Hello ! PHP is fun ! »

Rafraîchir la page du navigateur web qui pointe vers le serveur. Quel est le message obtenu ? pourquoi ?

INSTALLATION DE PHP (PHP-FPM)

Nous allons installer le moteur PHP, via le paquet Debian php-fpm :

$ sudo apt -y install php-fpm

Vérifier (et noter) la version de PHP :

$ php -v

Installer les modules complémentaires :

$ sudo apt -y install php-cli php-fpm php-json php-mysql

$ sudo apt -y install php-zip php-gd php-mbstring php-curl

$ sudo apt -y install php-xml php-pear php-bcmath php-bz2

On va maintenant redémarrer nos deux modules pour valider la configuration :

NB : « php7.x » est à adapter en fonction de la version (7.3 au moment de l’écriture de ces lignes) :

$ sudo systemctl restart php7.x-fpm

$ sudo systemctl restart nginx

Pour vérifier que PHP fonctionne, nous allons modifier le fichier index.php situé à la racine du site en y plaçant simplement l’exécution de fonction phpinfo() :

$ cd /var/www/html

$ sudo nano index.php

On y met donc ce simple script PHP :

<?php phpinfo();

?>

(7)

Rendez-vous sur votre navigateur pour rafraîchir la page, et si tout va bien, vous voyez une synthèse complète de la configuration PHP de votre serveur.

Nous avons donc maintenant un serveur http NGINX couplé avec PHP-FPM, nous allons désormais y ajouter un serveur de base de données.

NB (important) : notre serveur http est en mode « basique », nous n’y avons apporté aucune modification concernant la sécurisation, dans le but de ne pas alourdir ce TP ; mais un serveur en production doit être configuré plus avant afin de répondre aux critères actuels de sécurité et d’optimisation (certificats, règles crypto, http/2, …)

INSTALLATION DU SERVEUR MYSQL (MARIADB)

Comme tout service répandu, l’installation de mariaDB se fait de la plus simple des façons (cependant c’est un paquet assez lourd, de plusieurs centaines de Mo) :

$ sudo apt install mariadb-server

Ensuite, et c’est important, nous lançons la procédure d’installation sécurisée (qui consiste à mettre un mot de passe sur l’utilisateur root du serveur Mysql, désactiver la connexion distante du root et supprimer les bases de test). Attention à vos réponses ! dans les options entre crochets, celle en majuscules est la réponse par défaut (c’est-à-dire la réponse effective si vous tapez juste la touche Entrée) :

$ sudo mysql_secure_installation

Il faudra donc taper la touche « entrée » la plupart du temps, mais vous aurez à saisir (et mémoriser !) le mot de passe super-utilisateur du serveur mysql (en production, ce mot de passe devra être complexe).

Nous allons ensuite créer une première base de données. Une base de données est identifiée par un nom ; elle est généralement associée à un ou plusieurs utilisateurs qui auront différents « privilèges » dessus.

On entre dans la console mysql en mode super-user (le mot de passe associé doit donc être saisi) :

$ sudo mysql -u root -p

Dans cette console, on saisit des commandes en langage SQL pour gérer des bases de données et les objets associés (tables, colonnes, données, …).

Par exemple ici, nous créons donc notre première base de données que nous appellerons kerlanndb), et nous lui associons l’utilisateur kerlann (avec le mot de passe root) qui aura tous les privilèges sur tous les

composants de la base de données, lorsqu’il se connecte sur la machine locale (localhost) ; enfin nous rendons effectifs ces réglages (FLUSH) :

CREATE DATABASE kerlanndb;

GRANT ALL ON kerlanndb.* TO ‘kerlann’@’localhost’ IDENTIFIED BY ‘root’;

FLUSH PRIVILEGES;

exit

(8)

INSTALLATION D’UN PACKAGE CMS (WORDPRESS)

Nous avons désormais un serveur packagé NGINX PHP MySQL opérationnel.

Nous pouvons donc notamment y installer un outil complet tel que Wordpress, qui s’appuie sur ce genre de configuration pour fonctionner.

Nous allons installer un module WordPress dans l’arborescence du site de base. Rendez-vous sur le répertoire racine :

$ cd /var/www/html

On télécharge le dernier package en date de WordPress et on le décompresse :

$ sudo wget https://wordpress.org/latest.tar.gz

$ sudo tar -xvzf latest.tar.gz

On obtient un répertoire wordpress ; nous en transférons la propriété à l’utilisateur spécifique du système dédié au service web : www-data (afin qu’il puisse dynamiquement modifier son contenu) :

$ sudo chown -R www-data:www-data wordpress

Désormais, vous pouvez accéder à votre site WordPress depuis votre navigateur, sous le répertoire wordpress (ainsi, si l’adresse IP de votre serveur est 192.168.1.15, le site est accessible sur

http://192.168.1.15/wordpress)

La première chose qui sera demandée est la connexion à la base de données, telle que nous l’avons définie juste avant.

Prenez le temps de découvrir par vous-même le fonctionnement de cet outil (interface d’administration, personnalisation du site, choix de thèmes, extensions, écriture d’articles ou de pages, …)

INSTALLATION DE PHPMYADMIN

Afin de gérer les bases de données depuis l’interface du serveur, on va utiliser phpMyAdmin.

On télécharge le package dans le dossier racine de notre site (adapter en fonction de la version actuelle de phpMyAdmin) :

$ cd /var/www/html

$ sudo wget http://files.phpmyadmin.net/phpMyAdmin/5.0.1/phpMyAdmin-5.0.1- all-languages.tar.gz

On extrait le dossier archivé :

$ sudo tar -xvzf phpMyAdmin-5.0.1-all-languages.tar.gz

On renomme le dossier créé avec un nom plus simple (phpMyAdmin) :

$ sudo mv phpMyAdmin-5.0.1-all-languages phpMyAdmin

On crée un utilisateur avec des super-privilèges pour phpMyAdmin (login pma, mot de passe pmapass) :

$ sudo mysql -u root -p

GRANT ALL PRIVILEGES ON *.* TO 'pma'@'localhost' IDENTIFIED BY 'pmapass';

FLUSH PRIVILEGES;

Exit

(9)

Rendez-vous maintenant sur votre navigateur, pour accéder à la page web de phpMyAdmin :

Connectez-vous avec les identifiants définis avant (pma, pmapass) : on peut désormais gérer (avec de grands pouvoirs !) les différentes bases de données du notre serveur.

Cependant des erreurs demeurent, selon les messages en bas de l’écran, comme par exemple :

En effet, le répertoire /var/www/html/phpMyAdmin appartient à root et non par à www-data ; on corrige :

$ cd /var/www/html

$ sudo chown -R www-data:www-data phpMyAdmin On rafraîchit la page, ce problème a normalement disparu.

On a probablement aussi ce message :

En effet, phpMyAdmin a besoin de sa propre base de données pour son fonctionnement. Comme il a tous les droits sur le serveur mysql, il peut notamment la créer lui-même ; ainsi en suivant le lien « analyse du

problème », le problème se corrige de lui-même sans difficulté (il suffit de cliquer ensuite sur : créer la base de données « phpMyAdmin », puis revenir à la page d’accueil, en cliquant sur le logo phpMyAdmin en haut à gauche de la page).

Il reste un problème (normalement) :

En effet, phpMyAdmin a besoin d’un fichier de configuration de base, contenant notamment une clé de chiffrement Blowfish. Le service phpMyAdmin peut générer ce fichier de configuration, il suffit de naviguer vers http://xx.xx.xx.xx/phpMyAdmin/setup

(10)

On y trouve quelques avertissements (non bloquants, et temporaires), le serveur local (locahost ; s’il est absent, cliquer sur « nouveau serveur »), quelques paramètres à saisir, et un bouton pour télécharger le fichier de configuration généré :

D’autres onglets permettent une configuration plus fine, mais nous pouvons laisser les paramètres par défaut, pour notre cas actuel.

Le bouton télécharger vous permet de récupérer le fichier de configuration config.inc.php sur votre PC client.

Comment récupérer ce fichier sur le serveur ?

On va utiliser (par exemple) le protocole TFTP, très pratique dans un cas comme celui-là (en savoir plus : https://fr.wikipedia.org/wiki/Trivial_File_Transfer_Protocol)

Tout d’abord, installez sur votre PC un serveur TFTP, comme le célèbre Tftpd32 ou 64 de Philippe JOUNIN (disponible sur les ressources de cours) :

Sélectionnez le dossier qui contient le fichier téléchargé, et la bonne interface réseau (celle qui est sur le même LAN que la VM).

(11)

Sur le serveur, on installe un client tftp :

$ sudo apt install tftp

On se positionne dans le dossier phpMyAdmin :

$ cd /var/www/html/phpMyAdmin

Et on récupère le fichier depuis le serveur tftp (évidemment l’adresse IP est un exemple, à adapter selon votre contexte) :

$ sudo tftp 192.168.1.60 tftp> get config.inc.php

received XXX bytes in 0.0 seconds tftp> q

NB : si vous rencontrez des problèmes, pensez « firewall »

Une fois le fichier récupéré, notre page setup ne doit plus être accessible :

Et on revient à la page principale, où normalement il n’y a plus d’avertissement :

(12)

MIGRATION DU SERVEUR DE BASE DE DONNEES

Afin de sécuriser davantage notre système et faire face à une forte consultation, on se proposer de migrer la base de données du site Wordpress sur un serveur séparé (qui pourrait être un cluster HA ou un conteneur, qu’importe) ; nous allons ici utiliser simplement une autre VM Debian10 simple comme nouveau serveur.

Nous l’avons vu, phpMyAdmin est un outil bien connu qui permet de gérer de façon pointue des bases de données de type mysql. Nous allons l’utiliser pour migrer la base de données de notre site WEB Wordpress vers notre nouveau serveur.

CREATION D’UN NOUVEAU SERVEUR MYSQL

Nous utilisons donc un VM Debian10 x64 en mode console, connectée en bridge sur notre réseau local.

On se logue en root, et on opère les mises à jour habituelles :

# apt update

# apt upgrade

# apt -y install wget sudo

# adduser abcd sudo

(« abcd » est l’id utilisateur qui doit disposer de droits « sudoer »).

On se délogue, et on se relogue avec cet utilisateur sudoer.

On va repérer l’adresse IP de notre serveur :

$ ip -c a

PS : cette adresse aura été obtenue par DHCP ; bien entendu, dans un environnement réel, il faudrait fixer cette adresse.

On installe ensuite mariadb-server :

$ sudo apt install mariadb-server

Puis on lance la configuration initiale :

$ sudo mysql_secure_installation

Afin que le serveur mysql soit accessible de l’extérieur, il faut retirer un paramètre du fichier de configuration par défaut :

$ sudo nano /etc/mysql/mariadb.conf.d/50-server.cnf

Il y a un paramètre bind-address qui limite par défaut l’accès uniquement à 127.0.0.1 (accès local) ; il faut le désactiver en le « commentant » : placer un # en début de ligne) :

#bind-address = 127.0.0.1

Puis ne pas oublier de relancer le service :

$ sudo systemctl restart mariadb

(13)

AJOUT DU SERVEUR A LA CONSOLE PHPMYADMIN

Nous allons maintenant ajouter ce serveur sur notre outil phpMyAdmin.

Tout d’abord, nous allons créer un utilisateur dédié à phpMyAdmin qui permettra d’administrer notre nouveau serveur depuis la même interface que précédemment.

Ainsi, l’adresse IP exemple dans l’instruction GRANT qui suit est à remplacer par l’adresse IP de notre premier serveur (sur lequel tourne phpMyAdmin)

On entre dans la console mysql en mode super-user (le mot de passe associé doit donc être saisi) :

$ sudo mysql -u root -p

GRANT ALL PRIVILEGES ON *.* TO 'pma'@'192.168.1.38' IDENTIFIED BY 'pmapass';

FLUSH PRIVILEGES;

Exit

NB : on a utilisé les mêmes identifiants, mais on aurait pu en prendre d’autres pour ce serveur.

NB : pour information, à la place de l’adresse IP, on peut mettre le caractère % qui est un joker pour SQL : il signifie « n’importe quelle adresse IP ». Mais autant de privilèges avec aussi peu de restrictions, ce n’est pas très prudent.

Ensuite, sur le serveur initial, on modifie le fichier de configuration config.inc.php :

$ cd /var/www/html/phpMyAdmin

$ sudo nano config.inc.php

On ajoute dans la section « servers configuration », la description de notre nouveau serveur (attention pour l’adresse IP mettre l’adresse effective de votre nouveau serveur) :

/* Server : serveur mysql [2] */

$i++;

$cfg['Servers'][$i]['auth_type'] = 'cookie';

$cfg['Servers'][$i]['host'] = '192.168.1.94';

Désormais, sur l’interface phpMyAdmin, on a le choix des serveurs à administrer :

(14)

MISE EN MAINTENANCE DU SITE

Avant toute opération majeure sur un site WEB, il convient de le mettre en maintenance, pour éviter que des utilisateurs connectés ne viennent modifier des données. Il faut aussi vérifier qu’aucune tâche planifiée n’est à même de réaliser des opérations sur la base de données pendant cette migration.

Nous allons installer et activer une extension Wordpress pour la maintenance, depuis l’interface d’administration du site :

Choisissons par exemple WPMaintenance.

NB : Une extension doit être installée, et activée pour être utilisable. Une fois activée, un lien vers ses réglages est accessible en générale dans la barre latérale de la page d’administration du site.

Dans notre cas, voici le rendu de notre site lorsque WPmaintenance est activé :

(15)

TRANSFERT DE LA BASE DE DONNEES

DUMP DE LA BASE DE DONNEES

Nous allons maintenant sauvegarder notre base de donnes vers un seul fichier (dump). Ceci est réalisé grâce à l’outil d’export de phpMyAdmin :

IMPORT DU FICHIER DUMP SUR LE SERVEUR DEDIE

Sur notre nouveau serveur il faut d’abord créer au préalable la base de données avant de l’importer.

On ouvre la console mysql en mode root :

$ sudo mysql -u root -p

Dans cette console, on saisit des commandes en langage SQL pour gérer des bases de données et les objets associés (tables, colonnes, données, …).

Cette fois-ci, nous créons notre base de données kerlanndb, et nous lui associons l’utilisateur kerlann (avec le mot de passe root) qui aura tous les privilèges sur tous les composants de la base de données, lorsqu’il se connecte depuis le serveur web (192.168.1.38) ; enfin nous rendons effectifs ces réglages (FLUSH) : CREATE DATABASE kerlanndb;

GRANT ALL ON kerlanndb.* TO ‘kerlann’@’ 192.168.1.38’ IDENTIFIED BY ‘root’;

FLUSH PRIVILEGES;

exit

(16)

Maintenant, il faut importer le dump de la base initiale sur le nouveau serveur :

Puis nous modifions la configuration de WordPress pour modifier les paramètres de la base de données :

$ cd /var/www/html/wordpress

$ sudo nano wp-config.php

Dans ce fichier, il suffit juste de modifier le paramètre DB_HOST, en remplacement ‘localhost’ par l’adresse IP du nouveau serveur de base de données.

On vérifie que le site web est fonctionnel, en rafraîchissant simplement la page, et on désactive le mode maintenance.

La migration est terminée !

POUR ALLER PLUS LOIN

- Sécurisation du serveur web (certificat, configuration cryptogaphique, http/2, …)

- Mise en place d’un firewall iptables sur le serveur de base de données (filtrer les adresse IP entrantes autorisées, et le port 3306/TCP)

Références

Documents relatifs

ALTER TABLE employee ADD CONSTRAINT nom CHECK (lname &lt;&gt; ’’ AND fname &lt;&gt; ’’);. -- ALTER TABLE DROP CONSTRAINT

– si un même type d’entité intervient plusieurs fois dans un même type d’association, on doit explicitement indiquer le rôle de chaque entité – si on a

Eastwood Clint Eastwood Clint Cumberbatch Benedict Freeman Martin Sellers Peter Sellers Peter Sellers Peter. SELECT ne retourne pas un ensemble de n-uplets mais en fait une liste

Eastwood Clint The good, the Bad and the Ugly Blondie Eastwood Clint Gran Torino Walt Kowalski Cumberbatch Benedict Study in Pink Sherlock Holmes Freeman Martin Study in Pink Dr

On peut les supprimer : SELECT DISTINCT nom , prenom FROM PERSONNE , JOUE WHERE id = idacteur ;.

L'agrégation consiste à regrouper tous les tuples d'une table ayant même valeur pour un ou plusieurs attributs. Dans le résultat n'apparaîtra alors que le dernier de ces tuples, il

La base de données (données primaires) est la matière première à partir de laquelle la bioinformatique va produire d'autres données (données secondaires) et

Indiquer au système une clé primaire pour chaque table permet une indexation des données à l'aide de cette clé, ce qui renforce l'efficacité des procédures d'interrogation de