=====Administration=====
Ajout un nouvel utilisateur ''user'' ayant toutes les autorisations sur toutes les tables de la base de donnée ''datab'' avec le mot de passe ''password''.
GRANT ALL PRIVILEGES ON datab.* TO user@localhost IDENTIFIED BY 'password'
=====Requête SELECT=====
Soit la base de donnée :
* Film (__id__, titre, annee, //id_realisateur//, //code_pays//)
* Artiste (__id__, nom, prenom)
* Pays (__code__, nom, langue)
* Role (__id_film__, __id_acteur__, nom_role)
====Base====
Renvoie les colonnes d'un. table.
SELECT titre FROM Film;
SELECT * FROM Artiste;
Avec un alias
SELECT p.* FROM Pays p;
En triant les résultats
SELECT titre, annee FROM Film ORDER BY annee DESC;
====Conditions restrictives====
===Simple===
Une seule condition.
SELECT titre FROM Film WHERE annee = 1958;
Deux conditions.
SELECT titre FROM Film WHERE 1950 <= annee AND annee < 1960;
Condition avec ''BETWEEN''. Inclus les bornes inférieure et supérieure.
SELECT titre FROM Film WHERE annee BETWEEN 1960 AND 1970;
Condition d'une valeur ''NULL''. Un champ contenant ''NULL'' ne peut pas être sélectionné par une comparaison autre que ''IS NULL''.
SELECT nom FROM Artiste WHERE annee_naissance IS NULL;
Condition sur un champ texte avec le caractère joker ''%''. Pour les chaînes de caractères, utilisez plutôt l'apostrophe.
SELECT nom FROM Artiste WHERE nom LIKE 'A%';
Condition dans une liste de valeurs. Dans l'opérateur IN, le caractère joker ''%'' n'est pas utilisable.
SELECT nom FROM Artiste WHERE nom IN ('Dunst', 'Hitchcock');
Condition de négation. ''<>ALL'' est spécifique à Oracle. Les deux commandes ci-dessous sont équivalentes.
SELECT nom FROM Artiste WHERE nom NOT IN ('Dunst', 'Hitchcock');
SELECT nom FROM Artiste WHERE nom <>ALL ('Dunst', 'Hitchcock');
===Avec sous-requête===
Uniquement la ligne avec la valeur maximale
SELECT * FROM Film WHERE annee >=ALL (SELECT annee FROM Film);
Les films ayant pour réalisateur Hitckcock. Les étapes :
* on commence par récupérer l'id de Hitchcock,
* puis on récupère les films dont l'id correspond à celui d'Hitchcock.
SELECT titre FROM Film WHERE id_realisateur IN (
SELECT id FROM Artiste WHERE nom = 'Hitchcock');
Les films parus avant 2000, avec Clint Eastwood comme acteur. Les étapes :
* on commence par récupérer l'id de Clint Eastwood,
* on récupère les id des films dans lesquels Clint Eastwood à jouer,
* puis on affiche les films dont l'id est dans celui des films dans lesquels Clint Eastwood à jouer. On rajoute une condition ''annee < 2000'' pour ne garder que les films d'avant l'an 2000.
SELECT titre FROM Film WHERE annee < 2000 AND id IN (
SELECT id_film FROM Role WHERE id_acteur IN (
SELECT id FROM Artiste WHERE nom LIKE 'Eastwood' AND prenom LIKE 'Clint'));
=====Modifier une table existante=====
====Changer une colonne faisant office de clé étranger sur une autre table====
Intérêt : ajouter l'attribut Auto-Incrément qui a été oublié à une clé primaire.
Bien mettre le même type de donnée (ici ''INT(11)'') dans l%%'%%''ID'' de la table ''artiste'' et les colonnes ''id_realisateur'' et ''id_acteur'' des tables ''Film'' et ''Role''.
LOCK TABLES Artiste WRITE, Film WRITE, Role WRITE;
ALTER TABLE Film DROP FOREIGN KEY Film_ibfk_1;
ALTER TABLE Role DROP FOREIGN KEY Role_ibfk_2;
ALTER TABLE Artiste MODIFY id INT(11) AUTO_INCREMENT;
ALTER TABLE Film ADD CONSTRAINT Film_ibfk_1 FOREIGN KEY (id_realisateur) REFERENCES Artiste(id) ON DELETE RESTRICT ON UPDATE RESTRICT;
ALTER TABLE Role ADD CONSTRAINT Role_ibfk_2 FOREIGN KEY (id_acteur) REFERENCES Artiste(id) ON DELETE RESTRICT ON UPDATE RESTRICT;
UNLOCK TABLES;
[[http://stackoverflow.com/questions/13606469/cannot-change-column-used-in-a-foreign-key-constraint|Cannot change column used in a foreign key constraint]] {{ :lang:sql:mysql_-_cannot_change_column_used_in_a_foreign_key_constraint_-_stack_overflow_2020-04-27_10_25_58_am_.html |Archive du 28/11/2012 le 27/04/2020}}