跳至主要内容

MySQL 数据库引擎

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;
Database changed

mysql> CREATE TABLE `mysql_table` (
-> `int_id` INT NOT NULL AUTO_INCREMENT,
-> `float` FLOAT NOT NULL,
-> PRIMARY KEY (`int_id`));
Query OK, 0 rows affected (0,09 sec)

mysql> insert into mysql_table (`int_id`, `float`) VALUES (1,2);
Query OK, 1 row affected (0,00 sec)

mysql> select * from mysql_table;
+------+-----+
| int_id | value |
+------+-----+
| 1 | 2 |
+------+-----+
1 row in set (0,00 sec)

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 │
└────────┴───────┘