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

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