=====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}}