# MySQL/Syntaxe

* Introduction
* PhpMyAdmin
* Parcourir les bases de données
* Spécifier les noms
* LDD, LMD et LCD
* Variables utilisateurs
* Alias
* Types de données
* Manipulation de base
** mysqldump
* Manipulation de table
* Manipulation de données
* Requêtes
* NULL
* Opérateurs
* Fonctions
* Procédures stockées
* Regex
* Bases de données spatiales
* Importer et exporter
* Réplication
* Optimisation
* API
* Sécurité
* Mots réservés
* Débogage
* Introduction
* PhpMyAdmin
* Parcourir les bases de données
* Spécifier les noms
* LDD, LMD et LCD
* Variables utilisateurs
* Alias
* Types de données
* Manipulation de base
** mysqldump
* Manipulation de table
* Manipulation de données
* Requêtes
* NULL
* Opérateurs
* Fonctions
* Procédures stockées
* Regex
* Bases de données spatiales
* Importer et exporter
* Réplication
* Optimisation
* API
* Sécurité
* Mots réservés
* Débogage
[ Modifier le sommaire ]

## Principe

On peut diviser le vocabulaire SQL en trois groupes :
* Le LDD est composé de CREATE, ALTER et DROP. Il permet d'ajouter, modifier et supprimer les structures logiques qui contiennent les données, ou autorisent les utilisateurs à y accéder ou à les maintenir (bases, MaTables, vues, clés...). le LDD concerne les métadonnées.
* Le LMD est constitué de INSERT, UPDATE et DELETE. Pour ajouter, modifier et supprimer les données stockées dans les bases.
* Le LCD représente GRANT et REVOKE. Il s'agit de la sécurité de la base, des permissions des utilisateurs.
On peut aussi distinguer deux autres catégories :
* Le DQL (Data Query Language : langage de requête de données), comme SELECT, SHOW et HELP. Ils sont rattachés au LMD dans le modèle traditionnel.
* Le LCT (en anglais DTL ou Data Transaction Language : langage de transaction de données) avec START TRANSACTION, SAVEPOINT, COMMIT et ROLLBACK [TO SAVEPOINT]. Affiliable au LCD dans le modèle à trois catégories.

## Visualisation

* L'étoile (alias wildcard : "*") désigne toutes les colonnes d'une table, pour éviter de les sélectionner une par une.
* Quand un nom de colonne est un mot réservé par MySQL, pour ne pas qu'il soit interprété, il faut l'entourer d'accents graves (ex : SELECT `key`).

## Clés primaires et étrangères
### Lecture

Les clés (primaires et étrangères) d'une table sont incluses dans sa description :
Mais on peut aussi ne sélectionner qu'elles :
Sinon :

### Création

Pour ajouter une clé étrangère à une table existante :

#### CONSTRAINT

Facultativement, la clé étrangère peut aussi être nommée : on la baptise après le mot CONSTRAINT.
Cette syntaxe permet aussi d'ajouter des évènements en cas de suppression ou mise à jour du champ lié par une clé étrangère, à préciser parmi : RESTRICT, CASCADE, SET NULL, NO ACTION, SET DEFAULT. Ex :

#### CHECK

A ne pas confondre avec CONSTRAINT, il gère les contraintes indépendantes des autres tables. Exemples :

### Suppression

Pour désactiver les contraintes le temps d'une session :
Pour le faire globalement :
Pour faire supprimer définitivement une contrainte :
Mais parfois pour éviter les vérifications des contraintes, il suffit de lancer la commande suivante le temps d'un UPDATE avec un WHERE :
Lors du clustering comme avec Galera, il faut avoir une clé primaire par table.

## Créer/supprimer une vue

Il est impossible d'ajouter un index à une vue.

## Permissions

Pour les lister :
Pour les définir:

## Manipuler des variables

Les définitions sont effectuées à l'aide des mots clés "select" (suivi de ":=") ou "set" (avec "=") :
Pour les afficher ensuite :
Certaines variables globales représentent la configuration du système, et peuvent être changées provisoirement le temps d'une session, ou de façon permanente :
En cas de conversion de dates au format Text en Datetime, cela les efface toutes à 0000-00-00 00:00:00

### Variables globales

Pour avoir la version de MySQL :

## Références

* ↑ https://dev.mysql.com/doc/refman/8.0/en/create-table-check-constraints.html
* ↑ http://dev.mysql.com/doc/refman/5.7/en/view-restrictions.html