跳到主要内容
跳到主要内容

MySQL 数据库引擎

Not supported in ClickHouse Cloud

用于连接远程 MySQL 服务器上的数据库,并执行 INSERTSELECT 查询,在 ClickHouse 和 MySQL 之间交换数据。

MySQL 数据库引擎会将查询转换后发送到 MySQL 服务器,因此可以执行诸如 SHOW TABLESSHOW CREATE TABLE 等操作。

无法执行以下查询:

  • RENAME
  • CREATE TABLE
  • ALTER

创建数据库

CREATE DATABASE [IF NOT EXISTS] db_name [ON CLUSTER cluster]
ENGINE = MySQL('host:port', ['database' | database], 'user', 'password')

引擎参数

  • host:port — MySQL 服务器地址。
  • database — 远程数据库名称。
  • user — MySQL 用户。
  • password — 用户密码。

数据类型支持

MySQLClickHouse
UNSIGNED TINYINTUInt8
TINYINTInt8
UNSIGNED SMALLINTUInt16
SMALLINTInt16
UNSIGNED INT, UNSIGNED MEDIUMINTUInt32
INT, MEDIUMINTInt32
UNSIGNED BIGINTUInt64
BIGINTInt64
FLOATFloat32
DOUBLEFloat64
DATEDate
DATETIME, TIMESTAMPDateTime
BINARYFixedString

所有其他 MySQL 数据类型都转换为 String

支持 Nullable

全局变量支持

为提高兼容性,可以使用 MySQL 风格来引用全局变量,即 @@identifier

当前支持以下变量:

  • version
  • max_allowed_packet
注意

目前这些变量只是占位符,并未实际对应到任何内容。

示例:

SELECT @@version;

使用示例

在 MySQL 中的表:

mysql> USE test;
数据库已更改

mysql> CREATE TABLE `mysql_table` (
    ->   `int_id` INT NOT NULL AUTO_INCREMENT,
    ->   `float` FLOAT NOT NULL,
    ->   PRIMARY KEY (`int_id`));
查询成功,影响了 0 行 (0,09 秒)

mysql> insert into mysql_table (`int_id`, `float`) VALUES (1,2);
查询成功,影响了 1 行 (0,00 秒)

mysql> select * from mysql_table;
+------+-----+
| int_id | value |
+------+-----+
|      1 |     2 |
+------+-----+
结果集中有 1 行 (0,00 秒)

位于 ClickHouse 中、与 MySQL 服务器进行数据交换的数据库:

CREATE DATABASE mysql_db ENGINE = MySQL('localhost:3306', 'test', 'my_user', 'user_password') SETTINGS read_write_timeout=10000, connect_timeout=100;
SHOW DATABASES
┌─name─────┐
│ default  │
│ mysql_db │
│ system   │
└──────────┘
SHOW TABLES FROM mysql_db
┌─name─────────┐
│  mysql_table │
└──────────────┘
SELECT * FROM mysql_db.mysql_table
┌─int_id─┬─value─┐
│      1 │     2 │
└────────┴───────┘
INSERT INTO mysql_db.mysql_table VALUES (3,4)
SELECT * FROM mysql_db.mysql_table
┌─int_id─┬─value─┐
│      1 │     2 │
│      3 │     4 │
└────────┴───────┘