===== MySQL =====
Cela fait trop longtemps que je traine un fichier texte qui contient mes notes à propos du langage SQL, dans le but à l'époque d'être utilisé avec MySQL, puis MariaDB suite au rachat de Sun par Oracle... Une volonté (inutile ?) d'avoir un outil le plus ouvert possible ?
==== Les types de données ====
Avant de commencer le vif du sujet, il faut connaître quel type de données on peut stocker
== Numérique ==
^ NOM ^ Taille ^ Nombres stockables ^
| TINYINT | 1o | -128 à 127 |
| SMALLINT | 2o | -32 768 à 32 767 |
| MEDIUMINT | 3o | -8 388 608 à 8 388 607 |
| INT | 4o | -2 147 483 648 à 2 147 483 647 |
| BIGINT | 8o | -9223372036854885808 à ... |
UNSIGNED permet de ne pas avoir de nombre négatif et donc une plage positive 2x plus grand
NUMERIC ou DECIMAL : définit un nombre de chiffres avant et après la virgule, valeurs exactes conservées\\
FLOAT, DOUBLE REAL : valeur approchée stockée sous forme scientifique
== Alphanumérique ==
^ NOM ^ DESCRIPTION ^
| VARCHAR(25) | permet de stocker une chaine de caractère (moins de 255 octets) |
| TEXT | permet de stocker un texte de 2%%^%%16 octets |
| BINARY | chaine binaire sur 1 octet |
| ENUM | permet de prendre une valeur parmi celles prédéfinies (par exemple 'chien', 'chat') |
== Temporel ==
^ NOM ^ DESCRIPTION ^
| DATE | permet de stocker une date, plusieurs formats possibles (par défaut : aaaa-mm-jj ) |
| DATETIME | permet de stocker une date et une heure "aaaa-mm-jj hh:mm:ss" |
| TIME | permet de stocker une heure ou une durée (par défaut : "D HH:MM:SS.fraction") |
| YEAR | permet de stocker une année (par défaut : YYYY) |
==== Gérer les UTILISATEURS ====
CREATE USER 'nom'@'localhost' IDENTIFIED BY 'password' ; -- crée un utilisateur
GRANT ALL ON nomBase.* TO 'nom'@'localhost' ; -- donne les pleins droits à un utilisateur sur les bases de données
==== Gérer les BASES de données du serveur ====
SHOW DATABASES; -- lister les bases de données
CREATE DATABASE nom [CHARACTER SET 'utf8'] ; -- permet de créer une base de données [avec un encdage en utf-8]
DROP DATABASE nom ; -- permet de supprimer une base de données
USE nom ; -- spécifie quelle base de données on doit utiliser
== SAUVEGARDE d'une base ==
outil console :
mysqldump -u user -ppassword -B base > file
==== Gérer les TABLES d'une base ====
== créer ==
CREATE TABLE nom ( -- permet la création d'une table qui s'appelera nom
colonne1 description_colonne1, -- par exemple : id INT NOT NULL AUTO_INCREMENT
.. -- par exemple : prenom VARCHAR(25)
[PRIMARY KEY (colonnex)]
)
[ENGINE=moteur] ; -- MYISAM, INNODB
== Visualiser la structure ==
DESCRIBE table ; -- permet de d'afficher la structure de la table
== Modifier la structure ==
ALTER TABLE nom_table -- permet de modifier une table, plusieurs fonctions sont disponibles :
ADD nom_colonne description ; -- ajouter une colonne
DROP nom_colonne ; -- supprimer une colonne
CHANGE ancien_nom nouveau_nom desciption ; -- changer le nom de la colonne et de la description (sauf si identique)
MODIFY nom_colonne nouvelle_description ; -- changer le type de données
== Supprimer ==
DROP TABLE nom_table ; -- permet de supprimer une table, irréversible...
== Gérer les INDEX d'une table ==
ils peuvent être créés directement à la création de la table ou par modification de celle ci :
ALTER TABLE nom-table -- méthode 1 pour créer un index
ADD INDEX [nom index](col,..) -- un index tout simple, pour accélérer les recherches
ADD UNIQUE -- un index avec contrainte d'unité
ADD FULLTEXT -- MyISAM seulement, sur les colonnes de texte; caractères...
CREATE [UNIQUE/FULLTEXT] INDEX nom_index -- méthode 2 pour créer un index
ON nom_table (col,..)
ALTER TABLE nom_table -- requete pour supprimer un index
DROP INDEX nom_index
==== AGIR SUR LES DONNEES ====
== Ajouter des DONNEES ==
INSERT INTO table (col1, col2) -- requête pour l'insertion de données
VALUES (valeur1,valeur2) [,(valeur,valeur)] ; -- ajout de plusieurs lignes possibles
INSERT -- requête permettant l'ajout d'une ligne ou la mise à jour d'un ligne
INTO table (col1,col2) -- si l'ajout causerait un doublon (selon un index/clé UNIQUE)
VALUES (valeur, valeur)
ON DUPLICATE KEY UPDATE col=valeur, ..
SOURCE fichier.sql; -- effectue toutes les requêtes contenues dans le fichier
LOAD DATA LOCAL INFILE 'fichier.csv' -- permet de charger des valeurs à partir d'un fichier au format spécifié
INTO TABLE nom_table
FIELDS TERMINATED BY ';'
LINES TERMINATED BY '\n'
IGNORE 1 LINES
(col1,col2..) ;
== Récupérer des DONNEES ==
SELECT 'xxx' ; -- renvoie 'xxx'
SELECT col1, Col2 FROM nom_table ; -- renvoie toutes les valeurs contenu dans col1 et col2 de la table nom_table
SELECT * FROM nom_table ; -- renvoie tout le contenu de la table (tout le contenu de toutes les colonnes)
SELECT colonne -- renvoie le contenu de colonne de la table dans le cas où col=...
FROM table
WHERE col=... AND/OR ...
= < <= > >= != <=>(égal pour NULL)
AND OR XOR NOT
IS NOT NULL
SELECT col FROM table WHERE .. ORDER BY .. -- permet de trier les données avant de les afficher
ORDER BY col DESC/ASC -- permet de définir l'ordre croissant/décroissant
ORDER BY col1 , col2 -- trier selon col1, puis col2
SELECT DISTINCT col FROM table -- permet de ne pas afficher de doublon
SELECT col FROM table LIMIT n OFFSET o -- limite le nombre de ligne affichée, éventuellement avec un offset
== Supprimer des DONNEES ==
DELETE FROM table WHERE critères ; -- supprime les lignes de la table pour lesquels le critère est vrai
== Modifier des DONNEES ==
UPDATE table -- permet de modifier toutes les lignes pour lesquelles le critère est vrai, la modification porte sur les arguments spécifiés
SET col1=valeur, col2=valeur
WHERE critère