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

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