0% ont trouvé ce document utile (0 vote)
2 vues34 pages

Chapitre 2 SQL LDD

Le document présente une introduction au langage SQL et au SGBD MySQL, en détaillant les sous-langages LDD pour la définition de données, LMD pour la manipulation de données, et SELECT pour l'interrogation des données. Il aborde la création, modification et suppression de tables, ainsi que les types de données disponibles dans MySQL. Les chapitres incluent également des instructions pour gérer les bases de données et les tables, ainsi que des exemples pratiques.

Transféré par

berradaomar94
Copyright
© All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
2 vues34 pages

Chapitre 2 SQL LDD

Le document présente une introduction au langage SQL et au SGBD MySQL, en détaillant les sous-langages LDD pour la définition de données, LMD pour la manipulation de données, et SELECT pour l'interrogation des données. Il aborde la création, modification et suppression de tables, ainsi que les types de données disponibles dans MySQL. Les chapitres incluent également des instructions pour gérer les bases de données et les tables, ainsi que des exemples pratiques.

Transféré par

berradaomar94
Copyright
© All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd

Chapitres 2-3-4

Langage SQL
LDD-LMD-SELECT

Plan des chapitres 2-3-4


• Introduction au Langage SQL et Au SGBD MySQL
• Chapitre 2 SQL LDD
• Création, modification et suppression des tables
• Spécification des contraintes d’intégrité
• Chapitre 3 SQL LMD
• Mettre à jour les données avec SQL : LMD
• Chapitre 4 SQL SELECT
• Ecrire des instructions SQL SELECT élémentaires
• Limiter et trier des données
• Afficher les données issues de plusieurs tables : Les
jointures
• Agréger des données à l'aide de fonctions de groupe

2
Introduction au Langage SQL et
au SGBD MySQL

Pourquoi un tel langage ?


• un langage proche de la langue naturelle (anglais) : facile
à apprendre et comprendre
Presque toutes les requêtes sont du type:
"Je veux telles choses
à prendre à partir de telles sources
ayant telles caractéristiques
et ordonnées de telles manières "
Le SQL est fait pour être utilisé par :
• Le non informaticien est donc peut interroger la base de
données :
• sans être tributaire d’un spécialiste ;
• sans que sa formation lui coûte beaucoup du temps
4
Introduction au langage SQL
• Le langage SQL (Structured Query Language) peut
être considéré comme le langage d’accès normalisé
aux bases de données relationnelles.
• Il est aujourd’hui supporté par la plupart des SGBDs
que ce soit par les systèmes de gestion de bases de
données personnelles tel que Access ou par les
produits les plus professionnels tels que : Oracle,
SqlServer, MySQL, Informix, DB de IBM et etc.
• Il a fait l’objet de plusieurs normes ANSI/ISO dont la
plus répandue aujourd’hui est la norme SQL2 qui a été
proposé depuis 1992.
• Dans ce cours nous étudions le langage SQL dénini
pour le SGBD MySQL.

Les instructions SQL


SELECT Permet d'extraire des données de la
base.
Permettent, respectivement, d'entrer de
nouvelles lignes, de modifier des
INSERT lignes existantes et de supprimer des
UPDATE lignes dans la base de données.
DELETE Instructions constituant le Langage
de Manipulation de Données : LMD.
Permettent, respectivement, de définir,
CREATE de modifier et de supprimer des
ALTER structures de données dans les
DROP tables. Instructions constituant le
Langage de Définition de Données
(LDD).
6
Tables utilisées dans le cours (Voir
TD N°2)
• Table employees

Tables utilisées dans le cours (Voir


TD N°2)
• Table DEPARTMENTS

8
Chapitre 2
SQL LDD
Langage de Définition de
Données

Le sous-langage LDD de SQL


• Le sous-langage LDD (Langage de Définition
de Données) de SQL permet de créer des
structures de données et de les modifier.
• Les opérations du LDD :
• Création d’une base de données
• Création d’une table
• Suppression d’une table
• Ajout, suppression, modification d’une colonne
• Ajout, suppression d’une contrainte
• Ajout, suppression d’un index

10
Règles d'appellation
• Les noms de table et de colonne :
• doivent commencer par une lettre,
• peuvent comporter de 1 à 64 caractères,
• ne peuvent contenir que les caractères A à Z, a à z, 0 à
9, $ et _.
• ne doivent pas être identiques à ceux d'un autre objet
appartenant au même utilisateur,
• ne doivent pas correspondre à des mots réservés du
serveur SGBD utilisé.

11

Les types de données MySQL


• Types numériques
• Nombres entiers
• Nombres décimaux
• Types alphanumériques
• Chaines de type texte
• Chaines de type binaire
• Types temporels
• DATE, TIME et DATEETIME
• YEAR
• TIMESTAMP
• Date par défaut
• SET et ENUM

12
Faites le bon choix des types de données
• Un mauvais type de données pourrait entraîner :
• un gaspillage de mémoire
• ex. : si vous stockez de toutes petites données dans une colonne
faite pour stocker de grosses quantités de données) ;
• des problèmes de performance (ex. : il est plus rapide de faire une
recherche sur un nombre que sur une chaîne de caractères);
• un comportement contraire à celui attendu
• ex. : trier sur un nombre stocké comme tel, ou sur un nombre
stocké comme une chaîne de caractères ne donnera pas le même
résultat;
• l'impossibilité d'utiliser des fonctionnalités propres à un type de
données
• ex. : stocker une date comme une chaîne de caractères vous prive
des nombreuses fonctions temporelles disponibles.

13

Types numériques
• Il existe deux catégories pour les types numériques : les nombres
entiers, et les nombres décimaux.
• Nombres entiers :

14
Types de données : Nombres
décimaux
• Il existe cinq types pour définir les nombres
décimaux dans une colonne :
• DECIMAL
• NUMERIC
• FLOAT
• REAL
• DOUBLE

15

Types de données : Nombres décimaux


NUMERIC & DECIMAL

• NUMERIC et DECIMAL sont équivalents


• DECIMAL (6,2) ou NUMERIC(6,2)
• 6 est la précision : définit le nombre de chiffres
significatifs stockés
• 2 est l'échelle : définit le nombre de chiffres après
la virgule
• Dans un champ DECIMAL(6,2), MySQL
permet de stocker des nombres allant jusqu'à
9999.99

16
Types de données : Nombres décimaux
FLOAT, DOUBLE et REAL
• FLOAT peut s'utiliser sans paramètres
• Dans ce cas, quatre octets sont utilisés pour stocker les
valeurs
• Il est aussi possible de spécifier une précision et une échelle
• REAL et DOUBLE ne supportent pas de paramètres
• MySQL qui utilise 8 octets pour stocker les valeurs dans
REAL et DOUBLE
• DOUBLE est conseillé pour la compatibilité avec des
langages de programmation.

17

Types de données : Chaines de


caractères : CHAR, VARCHAR et TEXT
• CHAR(x) et VARCHAR(x) sont utilisés pour
stocker un texte de longueur x (x < 255 octets)
• Un CHAR(x) stocke x octets
• en remplissant des espaces vides si nécessaire
• Un VARCHAR(x) stocke entre 0 et x octets plus la
taille du texte stocké
• Si le texte saisi est plus long que la taille maximale définie
pour le champ il sera tronqué
• Le type TEXT
• Les types TEXT, TINYTEXT, MEDIUMTEXT et
LONGTEXT servent à stocker des textes de plus de
255 octets.
18
Types de données : Les types temporels
de MySQL
• DATE, DATETIME, TIME, TIMESTAMP et
YEAR
• MySQL effectue quelques vérifications de
base sur la validité de la date entrée
• le jour doit être compris entre 1 et 31 et le mois
entre 1 et 12
• Mais il est possible d'entrer une date telle que
le : 31 février 2011

19

Types de données : DATE


• Une date peut être entrée sous forme de nombre ou de
chaîne de caractères mais l’ordre est important :
• 'AAAA-MM-JJ' (format utilisé pour mémoriser une DATE est
stockée dans MySQL)
• 'AAMMJJ'
• 'AAAA/MM/JJ'
• 'AA+MM+JJ'
• 'AAAA%MM%JJ'
• AAAAMMJJ (nombre)
• AAMMJJ (nombre)
• MySQL supporte des DATE allant de '1001-01-01' à
'9999-12-31‘.
• Conversion d’une chaine de caractères en une date
• STR_TO_DATE(’31-12-9999', ‘%d-%m-%Y') est équivalente à
la date '9999-12-31‘.
• STR_TO_DATE(‘31-DEC-9999', ‘%d-%b-%Y') est équivalente
à la date '9999-12-31‘.
20
Types de données : DATETIME et TIME
• Formats possibles pour DATETIME
• 'AAAA-MM-JJ HH:MM:SS' (format utilisé pour stocker un
DATETIME dans MySQL)
• 'AA*MM*JJ HH+MM+SS'
• AAAAMMJJHHMMSS (nombre)
• Formats possibles pour TIME
• 'HH:MM:SS'
• 'HHH:MM:SS'
• 'MM:SS'
• 'J HH:MM:SS'
• 'HHMMSS'
• HHMMSS (nombre)

21

Types de données : YEAR


• Le type YEAR ne prend qu'un seul octet en mémoire
• on ne peut y stocker que des années entre 1901 et 2155
• une donnée de type YEAR peut être entrée sous forme de
chaîne de caractères ou d'entiers, avec 2 ou 4 chiffres
• Si on ne précise que deux chiffres, le siècle est ajouté par
MySQL selon les mêmes critères que pour DATE et
DATETIME :
• Si l’année est comprise entre 1 et 69 : le siècle en cours qui est
considéré
• Si l’année est comprise entre 70 et 99 : le siècle précédent qui est
considéré
• Exception :
• la valeur entière 00 sera interprétée comme la valeur par défaut de
YEAR : 0000
• La chaine de caractères ’00’ sera interprétée comme l'année 2000
22
Création d’une base de données

• Vous devez disposer :


• Des privilèges sur la base de données à créer (voir TP)

CREATE DATABASE nom_base_de_données;

• Vous devez indiquer :


• le nom de la base de données
• Accès à une base données
• Pour pouvoir créer des tables dans une base de données,
vous devez d’abord y accéder par la commande suivante :

USE nom_base_de_données;

26

Suppression d’une base de données

• Syntaxe

DROP DATABASE nom_base_de_données;

• Tous les objets de la base de données seront


supprimés.
• Cette commande une fois exécutée ne peut pas être
annulée.

27
Création d’une Table :
Commande CREATE TABLE
• Syntaxe simplifiée

CREATE [TEMPORARY]TABLE[IF NOT EXISTS][nomBase.]nomTable(


Nomcolumn datatype [NOT NULL][DEFAULT valeur1]
[COMMENT 'chaine1'] [, ...]
)[ENGINE = moteur];

• Vous devez indiquez :


• le nom de la table
• le nom, le type de données et la taille des colonnes
• Le moteur de création de la table

28

Syntaxe de la commande CREATE


TABLE
• TEMPORARY : Création d’une table temporaire
• IF NOT EXISTS : permet d’éviter qu’une erreur se
produise si la table existe déjà ;
• nomBase :
• S’il est omis, c’est la base de données en cours qui sera
considérée
• S’il est précisé, il désigne alors soit la base connectée soit une
autre base.
• DEFAULT : fixe une valeur par défaut.
• NOT NULL : interdit que la valeur de la colonne soit
nulle.
• COMMENT : permet de commenter une colonne.
• ENGINE : définit le type de table à créer.

29
Les moteurs de stockages des tables :
ENGINE
• Les moteurs de stockages tables sont une spécificité de MySQL.
• Ce sont des moteurs de stockage, Ils utilisent des mécanismes,
spécifiques à chaque moteur, de mémorisation des tables.
• MyISAM et InnoDB sont les deux moteurs les plus connus.
• MyISAM
• C'est le moteur qui s’applique par défaut.
• Son avantage : Les commandes d'insertion et sélection de
données sont particulièrement rapides.
• Son défaut : il ne gère pas les clés étrangères, qui permettent de
vérifier l'intégrité d'une référence d'une table à une autre table.
• InnoDB
• Son défaut : Plus lent et plus gourmand en ressources que
MyISAM,
• Son 1er avantage : Ce moteur gère les clés étrangères et les
transactions.
• Son 2ème avantage : De plus, en cas de crash du serveur, il
possède un système de récupération automatique des données.

30

Créer des tables : Exemple 1


• Créez la table dept avec le moteur InnoDB

CREATE TABLE dept(


deptno INT,
dname VARCHAR(14),
loc VARCHAR(13)
)ENGINE = InnoDB;

31
Vérification de la création d’une table
• On utilise l’une des commandes :
• Affiche toutes les colonnes de la table avec leurs
caractéristiques.

DESCRIBE [nomBase.] nomtable;

• Affiche une colonne particulière avec ses caractéristiques

DESCRIBE [nomBase.] nomtable[colonne];

32

Vérification de la création d’une table


• Afficher la structure de toute la table

• Afficher la structure d’une colonne

33
Créer des tables : Exemple 2
CREATE TABLE Animal (
id SMALLINT UNSIGNED NOT NULL AUTO_INCREMENT,
espece VARCHAR(40) NOT NULL,
sexe CHAR(1),
date_naissance DATETIME NOT NULL,
nom VARCHAR(30),
commentaires TEXT,
PRIMARY KEY (id)
) ENGINE=INNODB;
• UNSIGNED : Seuls les nombres positifs qui sont possibles
• AUTO_INCREMENT : Générateur automatique des
nombres de la colonne.
• NOT NULL : La colonne ne peut pas être vide
• PRIMARY KEY : clé primaire
34

Vérification de la création d’une table

35
Afficher les objets d’une base de données : la
commande show
• Syntaxe

SHOW objets;

• Permet d'afficher une liste des objets appartenant à une base de


données, ainsi que certaines caractéristiques de ces objets.
• Les objets possibles :
• DTABASES,
• TABLES,
• COLUMNS,
• CHARACTER SET,
• INDEX,
• GRANTS,
• PRIVILEGES,
• Etc.
36

Afficher les tables créées d’une base de


données : la commande show
• Syntaxe
SHOW tables;

• Permet d'afficher la liste des tables crées dans


une base de donnée en cours d’utilisation.

37
Afficher la structure d’une table d’une
base de données : la commande show
• Syntaxe
SHOW [FULL] COLUMNS FROM nom_table
[FROM nom_base_de données] ;

• Exemple

38

afficher la requête de création d’un


objet : la commande show
• La commande SHOW permet également d’afficher la
requête ayant servi à créer un objet tel que une table.

SHOW CREATE type_objet nom_objet;

• Exemple

39
Instruction ALTER TABLE

• L'instruction ALTER TABLE permet :


• d'ajouter une nouvelle colonne : ADD,
• de modifier le type d’une colonne : MODIFY,
• de changer le nom d’une colonne : CHANGE,
• ou de supprimer une colonne : DROP.

40

Sntaxe de l’nstruction ALTER TABLE

ALTER TABLE nomtable


ADD [COLUMN] nomcolumn datatype [NOT NULL];

ALTER TABLE nomtable


MODIFY nomcolumn new_datatype [NOT NULL];

ALTER TABLE nomtable


CHANGE nomcolumn new_name_colonne datatype;

ALTER TABLE nomtable


DROP [COLUMN] nomcolumn;

41
Exemples de l’instruction ALTER TABLE

ALTER TABLE dept


ADD COLUMN budget_dept NUMERIC(10,2);

ALTER TABLE dept


MODIFY deptno BIGINT NOT NULL;

ALTER TABLE dept


CHANGE dname nom_dept VARCHAR(14) NOT NULL;

ALTER TABLE dept


DROP COLUMN budget_dept;

ALTER TABLE dept


MODIFY loc VARCHAR(13) NOT NULL DEFAULT ‘00001’
42

Changer la valeur par défaut d’un attribut


• Pour changer ou supprimer la valeur par défaut d’un attribut.
• Attention aux types qui n’acceptent pas de valeur par défaut (les
familles BLOB et TEXT).
• Syntaxe :
• ALTER TABLE relation ALTER attribut { SET DEFAULT valeur |
• DROP DEFAULT }
• Changer sa valeur par défaut :
• ALTER TABLE Personnes ALTER ‘éléphone’ SET DEFAULT;
• ‘9999999999’
• Supprimer sa valeur par défaut :
• ALTER TABLE Personnes ALTER ‘téléphone’ DROP DEFAULT;

• Le changement ou la suppression n’affecte en rien les


enregistrements qui ont eu recours à cette valeur lors de leur
insertion.

43
Changer le nom d’une table
• Syntaxe :
• ALTER TABLE relation RENAME nouveau_nom;

• Exemple :
• ALTER TABLE Personnes RENAME Carnet;

• Cela consiste à renommer la table, et donc le


fichier qui la stocke.

44

DROP TABLE : Supprimer une table


• La structure et l'ensemble des données de la table
seront supprimées.
• Toutes les contraintes et tous les index seront
supprimés.
• Vous ne pouvez pas annuler une instruction DROP
TABLE.

DROP [TEMPORARY] TABLE [IF EXISTS]


[nomBase1.] nomTable1 [,[nomBase2.]nomTable2,...]

DROP TABLE dept;

45
Définir et ajouter
les contraintes d’intégrité
Et les indexes

46

Définition des contraintes


• Les contraintes appliquent des règles au niveau
des tables afin de renforcer la cohérence des
données.
• Les contraintes empêchent la suppression d'une
table lorsqu'il existe des dépendances.
• Les types de contrainte suivants sont utilisés :
• NOT NULL
• UNIQUE
• PRIMARY KEY
• FOREIGN KEY
• CHECK (n’est pas encore opérationnelle)
47
Définition des contraintes
• Les contraintes peuvent être déclarées de deux
manières :
• à la suite de la définition d’une colonne (valable pour les
contraintes monocolonnes) ;
• Ces contraintes sont dites «inline constraints».
• Après que toutes les colonnes soient déclarées ; ces
contraintes peuvent être définies sur plusieurs colonnes et
peuvent être personnalisées par un nom.
• Ces contraintes sont dites «out-of-line constraints».
• Il est recommandé :
• de déclarer la contrainte NOT NULL en ligne (inline
constraints) ;
• de définir les autres contraintes avec un nom. En effet, il
sera difficile sans ce nom de les faire évoluer : désactivation,
réactivation ou suppression de la contrainte.
48

Définir une contrainte nommée (avec


un nom)
• Syntaxe

CONSTRAINT nomContrainte
UNIQUE (colonne1 [,colonne2]...)
| PRIMARY KEY (colonne1 [,colonne2]...)
| FOREIGN KEY (colonne1 [,colonne2]...)
REFERENCES nomTablePere [(colonne1 [,colonne2]...)]
[ON DELETE {CASCADE | SET NULL}]
[ON UPDATE {CASCADE | SET NULL}]

49
Conventions recommandées
• Adoptez les conventions d’écriture suivantes
pour les contraintes nommées :
• Commencer le nom de la contrainte par une
abréviation du nom de la table et le nom de
colonne sur laquelle porte la contrainte :
nom_table_nom_colonne
• Terminer le nom par :
• _pk : pour la contrainte clé primaire,
• _fk : pour la contrainte clé étrangère,
• _un : pour la contrainte d’unicité.

50

Définir des contraintes : inline


constraints et out-of-line constraints
CREATE TABLE employees(
employee_id INT(6) UNSIGNED ZEROFILL ,
first_name VARCHAR(20),
job_id VARCHAR(10) NOT NULL,
CONSTRAINT emp_emp_id_pk
PRIMARY KEY(employee_id))
ENGINE=INNODB;

INT(6) UNSIGNED ZEROFILL : entier non signé


(UNSIGNED) et affiché sur 6 chiffres. Si l’entier possède
moins que 6 chiffres on complète alors par des zéros à
gauche du nombre entier (ZEROFILL).
51
Définir des contraintes : inline
constraints et out-of-line constraints
CREATE TABLE employees(
employee_id INT(6) UNSIGNED ZEROFILL,
first_name VARCHAR(20),
job_id VARCHAR(10) NOT NULL,
CONSTRAINT emp_emp_id_pk
PRIMARY KEY(employee_id)
)ENGINE=INNODB;

52

Contrainte NOT NULL

Interdit les valeurs NULL dans la colonne :

Contrainte NOT NULL Contrainte Absence de contrainte


(aucune ligne de cette NOT NULL NOT NULL
colonne ne peut (les lignes de cette
contenir de valeur colonne peuvent
NULL) contenir une valeur NULL)

53
Contrainte UNIQUE

Contrainte UNIQUE
EMPLOYEES


INSERT INTO

Autorisé
Non
autorisé :
existe déjà

54

Contrainte UNIQUE

CREATE TABLE employees(


employee_id INT(6) UNSIGNED ZEROFILL,
last_name VARCHAR(25) NOT NULL,
email VARCHAR(25),
salary FLOAT DEFAULT 10000.00
hire_date DATE NOT NULL,
CONSTRAINT emp_email_uk UNIQUE(email)
)ENGINE=INNODB;

55
Contrainte PRIMARY KEY
DEPARTMENTS
PRIMARY KEY

Non autorisé INSERT INTO


(valeur NULL)

Non autorisé
(50 existe déjà)

56

Contrainte PRIMARY KEY


Cette contrainte est définie au niveau table ou colonne :
CREATE TABLE departments(
department_id INT(2) UNSIGNED ZEROFILL,
department_name VARCHAR(30) NOT NULL,
manager_id INT(6) UNSIGNED ZEROFILL,
location_id INT,
CONSTRAINT dept_id_pk PRIMARY KEY(department_id)
) ENGINE=INNODB;

• La création d'une clé primaire composée s'effectue uniquement au


niveau de la table (out-of-line constraints).
• Une table ne peut comporter qu'une contrainte PRIMARY KEY, mais
peut présenter plusieurs contraintes UNIQUE.
• Remarque
• Un index UNIQUE est automatiquement créé pour une colonne
PRIMARY KEY.
• PRIMARY KEY équivaut à : UNIQUE + NOT NULL + INDEX.
57
Contrainte FOREIGN KEY
DEPARTMENTS

PRIMARY
KEY …

EMPLOYEES
FOREIGN
KEY

… Non
autorisé (9
INSERT INTO n'existe
pas)
Autorisé
58

Contrainte FOREIGN KEY


• Les colonnes à relier, clé primaire et clé étrangère,
doivent obligatoirement être du même type.
CREATE TABLE employees(
employee_id INT(6) UNSIGNED ZEROFILL,
last_name VARCHAR(25) NOT NULL,
email VARCHAR(25),
salary FLOAT DEFAULT 10000.00,
commission_pct FLOAT,
hire_date DATE NOT NULL,
manager_id INT(6)UNSIGNED ZEROFILL COMMENT'responsable',
department_id INT(2) UNSIGNED ZEROFILL,
CONSTRAINT emp_id_pk PRIMARY KEY(employee_id),
CONSTRAINT emp_dept_fk FOREIGN KEY (department_id)
REFERENCES departments(department_id),
CONSTRAINT emp_email_uk UNIQUE(email)
) ENGINE=INNODB;
59
Contrainte FOREIGN KEY

60

Ajouter une contrainte après création


d’une table
• Syntaxe

ALTER TABLE [nomBase].nomTable


ADD CONSTRAINT nomContrainte typeContrainte;

•Trois types de contraintes sont possibles :


• UNIQUE (colonne1 [,colonne2]...)
• PRIMARY KEY (colonne1 [,colonne2]...)
• FOREIGN KEY (colonne1 [,colonne2]...)
REFERENCES nomTablePère (col1 [,col2]...)
61
Ajouter une contrainte après création
d’une table
• Ajoutez à la table EMPLOYEES une contrainte
FOREIGN KEY précisant qu'un manager doit
déjà exister dans cette table en tant qu'employé
valide.

ALTER TABLE departments


ADD CONSTRAINT emp_manager_fk FOREIGN KEY(manager_id)
REFERENCES employees(employee_id)
ON DELETE SET NULL
ON UPDATE SET NULL
;

62

Affichage des contraintes d’une table


• Afficher les contraintes définies dans la table
employees;

SELECT CONSTRAINT_NAME, CONSTRAINT_TYPE


FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS
WHERE TABLE_NAME = 'employees';

63
Affichage des contraintes de toutes les tables
de toutes les bases de données

SELECT table_schema,table_name, constraint_name,


constraint_type
FROM information_schema.table_constraints;

64

Désactiver et réactiver les contraintes


FROREIGN KEY
• En cas de saisie de masse et afin de lever
momentanément les contrôles maintenus par
les contraintes de référence entre la table
père et la table fils, on doit alors les
désactiver :
• SET FOREIGN_KEY_CHECKS=0;
• Pour réactiver les contraintes :

• SET FOREIGN_KEY_CHECKS=1;

65
Supprimer les contraintes
• Supprimez de la table EMPLOYEES la contrainte
relative au manager.
ALTER TABLE employees
DROP FOREIGN KEY emp_manager_fk;

• Si la contrainte a été définie sans qu’il soit nommée,


son nom est généré automatiquement par le moteur
InnoDB et l’instruction SHOW CREATE TABLE
[nomBase].nomTable permet de le découvrir.
• Supprimez de la table EMPLOYEES la clé primaire
ALTER TABLE employees
DROP PRIMARY KEY;

66

Définition d'un index


Un index :
• est un objet de la base de données.
• permet au serveur du SGBD d'optimiser le temps de la
recherche des données
• peut réduire les E/S disque grâce à une méthode
d'accès permettant d'identifier rapidement
l'emplacement des données ;
• est utilisé et mis à jour automatiquement par le SGBD.
• Comme inconvénient :
• Un index ralentit les opérations de mise à jour des données

67
Mode de création des index

• Création automatique : un index unique est créé


automatiquement lorsque vous définissez une
contrainte PRIMARY KEY ou UNIQUE dans une
définition de table.

• Création manuelle : vous pouvez créer des index


non-uniques sur des colonnes pour réduire le
temps d'accès aux lignes.

68

Créer un index
• Créez un index sur une ou plusieurs colonnes.
CREATE [UNIQUE | FULLTEXT | SPATIAL] INDEX nomIndex
[USING BTREE | HASH]
ON nomTable (colonne1 [(taille1)] [ASC | DESC],...) ;

• UNIQUE permet de créer un index qui n’accepte pas les


doublons.
• FULLTEXT permet de bénéficier de fonctions de
recherche dans des textes.
• SPATIAL permet de profiter de fonctions pour les
données géographiques.
• BTREE| HASH défini la méthode d’indexation
• ASC et DESC précisent l’ordre (croissant ou décroissant).
69
Créer un index

• Réduisez le temps d'accès d'une interrogation à


la colonne LAST_NAME de la table EMPLOYEES.

CREATE UNIQUE INDEX emp_last_name_idx


USING BTREE
ON employees(last_name(3) DESC);

Index B-tree, ordre décroissant sur les trois


premiers caractères du nom des employées:
LAST_NAME.

70

Supprimer un index

• Supprimez un index à l'aide de la


commande DROP INDEX.

ALTER TABLE table_name DROP INDEX un_nomC;

• Supprimez l'index LAST_NAME_IDX.

ALTER TABLE employees DROP INDEX emp_last_name_idx ;

71

Vous aimerez peut-être aussi