CREATE CLUSTER TABLE
语法说明
集群表是指在系统租户下的系统库 mo_catalog
创建的表,该表会在其它租户下同时生效。系统租户下可对该表进行 DDL 与 DML 操作,其它租户只能进行查询或基于该表创建视图。
本篇文档将讲述如何在 MatrixOne 数据库建立集群表。
语法结构
> CREATE CLUSTER TABLE [IF NOT EXISTS] tbl_name
(create_definition,...)
[table_options]
[partition_options]
使用说明
-
创建集群表仅限于 sys 租户管理员角色才能创建。
-
sys 租户的集群表包含所有数据,其它租户下可能只会看到部分数据。
-
在集群表中,
account_id
字段是自动生成的,表示在插入或 LOAD DATA 时指定数据的可见租户的 id,每条数据只能选择一个可见租户,若您想多个租户都能查看该数据,需要多次插入指定不同租户 id,该字段数据在其它租户中查询不会返回。 -
集群表不能为外表或临时表,在所有租户下的表结构完全相同。
示例
--创建两个租户 test1 和 test2
mysql> create account test1 admin_name = 'root' identified by '111' open comment 'tenant_test';
Query OK, 0 rows affected (0.44 sec)
mysql> create account test2 admin_name = 'root' identified by '111' open comment 'tenant_test';
Query OK, 0 rows affected (0.51 sec)
--在 sys 租户下创建集群表
mysql> use mo_catalog;
Database changed
mysql> drop table if exists t1;
Query OK, 0 rows affected (0.00 sec)
mysql> create cluster table t1(a int);
Query OK, 0 rows affected (0.01 sec)
--查看租户 id
mysql> select * from mo_account;
+------------+--------------+--------+---------------------+----------------+---------+----------------+
| account_id | account_name | status | created_time | comments | version | suspended_time |
+------------+--------------+--------+---------------------+----------------+---------+----------------+
| 0 | sys | open | 2024-01-11 08:56:57 | system account | 1 | NULL |
| 6 | test1 | open | 2024-01-15 03:15:40 | tenant_test | 7 | NULL |
| 7 | test2 | open | 2024-01-15 03:15:48 | tenant_test | 8 | NULL |
+------------+--------------+--------+---------------------+----------------+---------+----------------+
3 rows in set (0.01 sec)
--在集群表 t1 中插入数据只对 test1 租户可见
mysql> insert into t1 values(1,6),(2,6),(3,6);
Query OK, 3 rows affected (0.01 sec)
--在 sys 租户中查看 t1 的数据,可看到包含 `account_id` 字段在内的所有数据
mysql> select * from t1;
+------+------------+
| a | account_id |
+------+------------+
| 1 | 6 |
| 2 | 6 |
| 3 | 6 |
+------+------------+
3 rows in set (0.00 sec)
--在 test1 租户中查看 t1 的数据,可以看到非 `account_id` 字段的数据
mysql> select * from t1;
+------+
| a |
+------+
| 1 |
| 2 |
| 3 |
+------+
3 rows in set (0.01 sec)
--在 test2 租户中查看 t1 的数据,不会看到有数据
mysql> select * from t1;
Empty set (0.01 sec)
--在 test1 租户中创建基于 t1 的视图
mysql> create view t1_view as select * from mo_catalog.t1;
Query OK, 0 rows affected (0.01 sec)
mysql> select * from t1_view;
+------+
| a |
+------+
| 1 |
| 2 |
| 3 |
+------+
3 rows in set (0.00 sec)
--在 test2 租户中创建基于 t1 的视图
mysql> create view t1_view as select * from mo_catalog.t1;
Query OK, 0 rows affected (0.01 sec)
mysql> select * from t1_view;
Empty set (0.01 sec)