> ## Documentation Index
> Fetch the complete documentation index at: https://private-7c7dfe99-mintlify-8c05c8a2.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

> Permet d'exécuter des requêtes `SELECT` et `INSERT` sur des données stockées sur un serveur MySQL distant.

# mysql

Permet d'exécuter des requêtes `SELECT` et `INSERT` sur des données stockées sur un serveur MySQL distant.

<div id="syntax">
  ## Syntaxe
</div>

```sql theme={null}
mysql({host:port, database, table, user, password[, replace_query, on_duplicate_clause] | named_collection[, option=value [,..]]})
```

<div id="arguments">
  ## Arguments
</div>

| Argument              | Description                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               |
| --------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `host:port`           | Adresse du serveur MySQL.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 |
| `database`            | Nom de la base de données distante.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       |
| `table`               | Nom de la table distante.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 |
| `user`                | Utilisateur MySQL.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        |
| `password`            | Mot de passe de l’utilisateur.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            |
| `replace_query`       | Indicateur qui convertit les requêtes `INSERT INTO` en `REPLACE INTO`. Valeurs possibles :<br />    - `0` - La requête est exécutée comme `INSERT INTO`.<br />    - `1` - La requête est exécutée comme `REPLACE INTO`.                                                                                                                                                                                                                                                                                                                                                   |
| `on_duplicate_clause` | Expression `ON DUPLICATE KEY on_duplicate_clause` ajoutée à la requête `INSERT`. Elle ne peut être spécifiée qu’avec `replace_query = 0` (si vous passez simultanément `replace_query = 1` et `on_duplicate_clause`, ClickHouse génère une exception).<br />    Exemple : `INSERT INTO t (c1,c2) VALUES ('a', 2) ON DUPLICATE KEY UPDATE c2 = c2 + 1;`<br />    Ici, `on_duplicate_clause` correspond à `UPDATE c2 = c2 + 1`. Consultez la documentation MySQL pour savoir quelle valeur de `on_duplicate_clause` vous pouvez utiliser avec la clause `ON DUPLICATE KEY`. |

Les arguments peuvent également être transmis à l’aide de [collections nommées](/fr/concepts/features/configuration/server-config/named-collections). Dans ce cas, `host` et `port` doivent être spécifiés séparément. Cette approche est recommandée en environnement de production.

Les clauses `WHERE` simples telles que `=, !=, >, >=, <, <=` sont actuellement exécutées sur le serveur MySQL.

Le reste des conditions et la contrainte d’échantillonnage `LIMIT` ne sont exécutés dans ClickHouse qu’une fois la requête MySQL terminée.

Prend en charge plusieurs répliques, qui doivent être séparées par `|`. Par exemple :

```sql theme={null}
SELECT name FROM mysql(`mysql{1|2|3}:3306`, 'mysql_database', 'mysql_table', 'user', 'password');
```

ou

```sql theme={null}
SELECT name FROM mysql(`mysql1:3306|mysql2:3306|mysql3:3306`, 'mysql_database', 'mysql_table', 'user', 'password');
```

<div id="returned_value">
  ## Valeur retournée
</div>

Un objet de table avec les mêmes colonnes que la table MySQL d’origine.

<Note>
  Certains types de données MySQL peuvent correspondre à différents types de ClickHouse ; cela est géré par le paramètre au niveau de la requête [mysql\_datatypes\_support\_level](/fr/reference/settings/session-settings#mysql_datatypes_support_level)
</Note>

<Note>
  Dans la requête `INSERT`, pour distinguer la fonction de table `mysql(...)` d’un nom de table accompagné d’une liste de noms de colonnes, vous devez utiliser les mots-clés `FUNCTION` ou `TABLE FUNCTION`. Voir les exemples ci-dessous.
</Note>

<div id="examples">
  ## Exemples
</div>

Table dans MySQL :

```text theme={null}
mysql> CREATE TABLE `test`.`test` (
    ->   `int_id` INT NOT NULL AUTO_INCREMENT,
    ->   `float` FLOAT NOT NULL,
    ->   PRIMARY KEY (`int_id`));

mysql> INSERT INTO test (`int_id`, `float`) VALUES (1,2);

mysql> SELECT * FROM test;
+--------+-------+
| int_id | float |
+--------+-------+
|      1 |     2 |
+--------+-------+
```

Sélection de données dans ClickHouse :

```sql theme={null}
SELECT * FROM mysql('localhost:3306', 'test', 'test', 'bayonet', '123');
```

Ou avec les [collections nommées](/fr/concepts/features/configuration/server-config/named-collections) :

```sql theme={null}
CREATE NAMED COLLECTION creds AS
        host = 'localhost',
        port = 3306,
        database = 'test',
        user = 'bayonet',
        password = '123';
SELECT * FROM mysql(creds, table='test');
```

```text theme={null}
┌─int_id─┬─float─┐
│      1 │     2 │
└────────┴───────┘
```

<div id="enable-compression">
  ### `enable_compression`
</div>

Active la compression pour les connexions via le protocole MySQL.

Valeur par défaut : `false`.

Ce paramètre s’applique à :

* la fonction de table `mysql` ;
* le moteur de table `MySQL` ;
* le moteur de base de données `MySQL` ;
* les collections nommées utilisées par les intégrations MySQL.

Lorsqu’il est activé, ClickHouse demande la compression pour cette connexion.

Exemple :

```sql theme={null}
SELECT *
FROM mysql(
    'mysql80:3306',
    'clickhouse',
    'test_table',
    'root',
    'password',
    SETTINGS enable_compression = 1
);
```

Remplacement et insertion :

```sql theme={null}
INSERT INTO FUNCTION mysql('localhost:3306', 'test', 'test', 'bayonet', '123', 1) (int_id, float) VALUES (1, 3);
INSERT INTO TABLE FUNCTION mysql('localhost:3306', 'test', 'test', 'bayonet', '123', 0, 'UPDATE int_id = int_id + 1') (int_id, float) VALUES (1, 4);
SELECT * FROM mysql('localhost:3306', 'test', 'test', 'bayonet', '123');
```

```text theme={null}
┌─int_id─┬─float─┐
│      1 │     3 │
│      2 │     4 │
└────────┴───────┘
```

Copie des données d'une table MySQL vers une table ClickHouse :

```sql theme={null}
CREATE TABLE mysql_copy
(
   `id` UInt64,
   `datetime` DateTime('UTC'),
   `description` String,
)
ENGINE = MergeTree
ORDER BY (id,datetime);

INSERT INTO mysql_copy
SELECT * FROM mysql('host:port', 'database', 'table', 'user', 'password');
```

Ou, si vous copiez uniquement un lot incrémentiel depuis MySQL en vous basant sur l’ID maximal actuel :

```sql theme={null}
INSERT INTO mysql_copy
SELECT * FROM mysql('host:port', 'database', 'table', 'user', 'password')
WHERE id > (SELECT max(id) FROM mysql_copy);
```

<div id="related">
  ## Voir aussi
</div>

* [Le moteur de table « MySQL »](/fr/reference/engines/table-engines/integrations/mysql)
* [Utiliser MySQL comme source d’un dictionnaire](/fr/reference/statements/create/dictionary/sources/mysql)
* [mysql\_datatypes\_support\_level](/fr/reference/settings/session-settings#mysql_datatypes_support_level)
* [mysql\_map\_fixed\_string\_to\_text\_in\_show\_columns](/fr/reference/settings/session-settings#mysql_map_fixed_string_to_text_in_show_columns)
* [mysql\_map\_string\_to\_text\_in\_show\_columns](/fr/reference/settings/session-settings#mysql_map_string_to_text_in_show_columns)
* [mysql\_max\_rows\_to\_insert](/fr/reference/settings/session-settings#mysql_max_rows_to_insert)
