实战教程第三章3.5:如何使用 MySQL 租户做常见数据库开发

2024年 5月 7日 40.3k 0

用户管理

这里用户指租户里的用户,跟传统 MySQL 里的用户概念一样。 OceanBase MySQL 租户创建用户有两个方法:

  • create user 创建用户。
  • grant 语句自动创建用户。

示例:

MySQL [oceanbase]> create user user01 identified by 'zfkrcOl5MG';
Query OK, 0 rows affected (0.024 sec)

MySQL [oceanbase]> grant all privileges on test.* to user01 ;
Query OK, 0 rows affected (0.013 sec)

MySQL [oceanbase]> grant all privileges on test.* to user02 identified by 'dQuybvRxM8';
Query OK, 0 rows affected (0.028 sec)

OceanBase MySQL 租户不支持更新用户元数据的密码字段。

查看用户权限用语句 show grants 。

示例:

MySQL [oceanbase]> show grants for user01;
+----------------------------------------------+
| Grants for user01@%                          |
+----------------------------------------------+
| GRANT USAGE ON *.* TO 'user01'               |
| GRANT ALL PRIVILEGES ON `test`.* TO 'user01' |
+----------------------------------------------+
2 rows in set (0.001 sec)

MySQL [oceanbase]> show grants for user02;
+----------------------------------------------+
| Grants for user02@%                          |
+----------------------------------------------+
| GRANT USAGE ON *.* TO 'user02'               |
| GRANT ALL PRIVILEGES ON `test`.* TO 'user02' |
+----------------------------------------------+
2 rows in set (0.001 sec)

数据库管理

OceanBase MySQL 租户下可以建多个数据库(database),表只能在具体的数据库下新建。

示例:

MySQL [test]> create database tpccdb;
Query OK, 1 row affected (0.012 sec)

MySQL [test]> show databases;
+--------------------+
| Database           |
+--------------------+
| oceanbase          |
| information_schema |
| mysql              |
| test               |
| tpccdb             |
+--------------------+
5 rows in set (0.002 sec)

create table ware(w_id int
   , w_ytd decimal(12,2)
    , w_tax decimal(4,4)
    , w_name varchar(10)
    , w_street_1 varchar(20)
    , w_street_2 varchar(20)
    , w_city varchar(20)
    , w_state char(2)
    , w_zip char(9)
    , unique(w_name, w_city)
    , primary key(w_id)
    );
 
create table cust (c_w_id int NOT NULL
     , c_d_id int NOT null
     , c_id int NOT null
     , c_discount decimal(4, 4)
     , c_credit char(2)
     , c_last varchar(16)
     , c_first varchar(16)
     , c_middle char(2)
     , c_balance decimal(12, 2)
     , c_ytd_payment decimal(12, 2)
     , c_payment_cnt int
     , c_credit_lim decimal(12, 2)
     , c_street_1 varchar(20)
     , c_street_2 varchar(20)
     , c_city varchar(20)
     , c_state char(2)
     , c_zip char(9)
     , c_phone char(16)
     , c_since date
     , c_delivery_cnt int
     , c_data varchar(500)
     , index icust(c_last, c_d_id, c_w_id, c_first, c_id)
     , FOREIGN KEY (c_w_id) REFERENCES ware(w_id)
     , primary key (c_w_id, c_d_id, c_id)
     );

OceanBase MySQL 租户支持外键。不过在分布式数据库里,如果读写并发很高,不推荐在数据库层面使用外键约束。外键可能会给性能带来负面影响,会增加不必要的阻塞和死锁。

复制表的结构用 like ,包括主键、唯一键、索引名称都会复制。在 MySQL 语法里,主键名\唯一约束\索引名在一个表内不能重复,但是不同表之间可以重复。

create table t1 like ware;

复制表的结构和数据用 create table ... as select 。不过要注意,这个复制的是表的基本数据类型,对于主键、唯一约束、索引信息等不会复制。

create table t2 as select * from ware;

MySQL [test]> show create table t1\G
*************************** 1. row ***************************
       Table: t1
Create Table: CREATE TABLE `t1` (
  `w_id` int(11) NOT NULL,
  `w_ytd` decimal(12,2) DEFAULT NULL,
  `w_tax` decimal(4,4) DEFAULT NULL,
  `w_name` varchar(10) DEFAULT NULL,
  `w_street_1` varchar(20) DEFAULT NULL,
  `w_street_2` varchar(20) DEFAULT NULL,
  `w_city` varchar(20) DEFAULT NULL,
  `w_state` char(2) DEFAULT NULL,
  `w_zip` char(9) DEFAULT NULL,
  PRIMARY KEY (`w_id`),
  UNIQUE KEY `w_name` (`w_name`, `w_city`) BLOCK_SIZE 16384 GLOBAL
) DEFAULT CHARSET = utf8mb4 ROW_FORMAT = COMPACT COMPRESSION = 'zstd_1.3.8' REPLICA_NUM = 1 BLOCK_SIZE = 16384 USE_BLOOM_FILTER = FALSE TABLET_SIZE = 134217728 PCTFREE = 0
1 row in set (0.003 sec)

MySQL [test]> show create table t2\G
*************************** 1. row ***************************
       Table: t2
Create Table: CREATE TABLE `t2` (
  `w_id` int(11) NOT NULL,
  `w_ytd` decimal(12,2) DEFAULT NULL,
  `w_tax` decimal(4,4) DEFAULT NULL,
  `w_name` varchar(10) DEFAULT NULL,
  `w_street_1` varchar(20) DEFAULT NULL,
  `w_street_2` varchar(20) DEFAULT NULL,
  `w_city` varchar(20) DEFAULT NULL,
  `w_state` char(2) DEFAULT NULL,
  `w_zip` char(9) DEFAULT NULL
) DEFAULT CHARSET = utf8mb4 ROW_FORMAT = COMPACT COMPRESSION = 'zstd_1.3.8' REPLICA_NUM = 1 BLOCK_SIZE = 16384 USE_BLOOM_FILTER = FALSE TABLET_SIZE = 134217728 PCTFREE = 0
1 row in set (0.002 sec)

观察上面两个表结构,主键、唯一键和索引不同。

附录:

  • 3.1 查看 OceanBase 集群资源的使用情况
  • 3.2 如何创建和连接 MySQL 租户
  • 3.3 如何连接租户
  • 3.4 如何对租户参数(或变量)进行设置
  • 3.5 如何使用 MySQL 租户做常见数据库开发
  • 3.6 如何使用 OceanBase 分区表进行水平拆分
  • 3.7 (高级)如何使用 OceanBase 表分组
  • 3.8(高级)如何使用 OceanBase 复制表
  • 3.9 常见问题

结束语

加入教程直播群方式一:钉钉群号3255 4020

加入教程直播群方式二:扫码下方二维码加入

实战教程第三章3.5:如何使用 MySQL 租户做常见数据库开发-1

相关文章

Oracle如何使用授予和撤销权限的语法和示例
Awesome Project: 探索 MatrixOrigin 云原生分布式数据库
下载丨66页PDF,云和恩墨技术通讯(2024年7月刊)
社区版oceanbase安装
Oracle 导出CSV工具-sqluldr2
ETL数据集成丨快速将MySQL数据迁移至Doris数据库

发布评论