OceanBase基本语法(MySQL租户)

架构

OceanBase 数据库支持数据跨地域(Region)部署,一个 Region 可以包含一个或者多个 Zone。Zone 是可用区(Availability Zone)的简写。

Zone 本身是一个逻辑概念,是对物理机进行管理的容器,一般是同一机房的一组机器的组合。物理层面来讲一个 Zone 通常等价于一个机房、一个数据中心或一个 IDC。

一个 OceanBase 集群通常会分布在同城的 3 个机房中,同一份数据的三个副本分别分布在 3 个机房中(即三个 Zone 中)。

 OceanBase 数据库是支持多租户的,这里租户的概念类似于传统数据库的数据库实例。租户下可以建立数据库,在租户的数据库下可以建立表。

 目前支持两种不同的租户类型:MySQL 租户和 Oracle 租户。使用不同类型的租户对应不同类型的语法和功能。

OceanBase 数据库支持租户隔离。每个租户可以被赋于一定的资源(比如 CPU,内存,IOPS 和磁盘空间)。通过资源配置和设定资源池可以实现对租户资源的控制。

查看数据库版本

obclient> select version();

创建数据库

使用 CREATE DATABASE 语句创建数据库。

示例如下:

  • 创建数据库 test 2,并指定字符集为 UTF8

    obclient> CREATE DATABASE test2 DEFAULT CHARACTER SET UTF8;

查看数据库

使用 SHOW DATABASES 语句查看数据库。

示例如下:

obclient> SHOW DATABASES;

删除数据库

使用 DROP DATABASE 语句删除数据库。

示例如下:

obclient> DROP DATABASE my_db;    

创建表

使用 CREATE TABLE 语句在数据库中创建新表。

示例如下:

obclient>CREATE TABLE table_name2 (c_w_id int NOT NULL
, c_d_id int NOT null
, c_id int NOT null
, c_last varchar(16)
, c_first varchar(16)
, c_middle char(2)
, c_balance decimal(12, 2)
, index icust(c_last, c_d_id, c_w_id, c_first, c_id)
, FOREIGN KEY (c_w_id) REFERENCES table_name1(w_id)
, primary key (c_w_id, c_d_id, c_id)
);

创建了一个自增列,列的类型可以定义为 AUTO_INCREMENT,示例如下:

obclient> CREATE TABLE t1(id bigint not null auto_increment primary key
, name varchar(50)
, gmt_create timestamp not null default current_timestamp
);

创建联合主键:CREATE TABLE t1(c1 INT, c2 INT, CONSTRAINT pk_c1_c2 PRIMARY KEY(c1, c2));

注意:OceanBase 数据库只支持在建表时通过 CREATE TABLE 创建主键约束,暂不支持通过 ALTER TABLE 追加、删除、修改主键约束。

变相修改主键方法:

复制表结构和数据

不支持select * into from t语句。

使用 CREATE TABLE LIKE 语句复制表结构。

obclient>CREATE TABLE t1 like t;

使用INSERT INTO … SELECT …语句复制表数据。

obclient>INSERT INTO t1 SELECT * FROM t;

查看表

使用 SHOW CREATE TABLE 语句查看建表语句。

示例如下:

obclient> SHOW CREATE TABLE test;

使用 SHOW TABLES 语句查看指定数据库中的所有表。

示例如下:

obclient> SHOW TABLES FROM my_db;

使用 DESCRIBE TABLE 语句查看表结构。

示例如下:

obclient> DESCRIBE test;
+-------+------------+------+-----+---------+-------+
| Field | Type       | Null | Key | Default | Extra |
+-------+------------+------+-----+---------+-------+
| c1    | int(11)    | NO   | PRI | NULL    |       |
| c2     | varchar(3) | YES  |     | NULL    |       |
+-------+------------+------+-----+---------+-------+

使用 ALTER TABLE 语句修改表结构。

示例如下:

obclient> ALTER TABLE test CHANGE COLUMN c2 c3 CHAR(10);
Query OK, 0 rows affected (0.08 sec)
obclient> DESCRIBE test;
+-------+----------+------+-----+---------+-------+
| Field | Type     | Null | Key | Default | Extra |
+-------+----------+------+-----+---------+-------+
| c1    | int(11)  | NO   | PRI | NULL    |       |
| c3     | char(10) | YES  |     | NULL    |       |
+-------+----------+------+-----+---------+-------+

执行以下命令,增加 c3 列。

obclient> ALTER TABLE test ADD c3 int;

执行以下命令,删除 c3 列。

obclient> SHOW TABLES FROM my_db;

修改表

新增列,支持在表中新增列,但不支持增加主键列。

obclient> ALTER TABLE test ADD c3 int;

修改列类型。修改列c1为bigint。

obclient>ALTER TABLE test MODIFY c1 BIGINT(50);

修改列名称。修改列c2为c。

obclient>ALTER TABLE test RENAME COLUMN c2 TO c;

同时修改列名称和列类型。修改列c2为c,字段为char(60)

obclient>ALTER TABLE test CHANGE COLUMN c2 c CHAR(60);

删除列,支持删除表中的列,但不允许删除主键列或包含索引的列。

obclient> ALTER TABLE test DROP c;

重命名表

obclient> ALTER TABLE test RENAME TO t1;

修改列的默认值

ALTER TABLE test CHANGE COLUMN c2 c2 varchar(50) DEFAULT 2;

删除表

使用 DROP TABLE 语句删除表。

obclient> DROP TABLE IF EXISTS test;

创建索引

使用 CREATE INDEX 语句创建表的索引。

obclient> CREATE INDEX test_index ON test (c1, c2);

查看索引

使用 SHOW INDEX 语句查看表的索引。

obclient> SHOW INDEX FROM test;

删除索引

使用 DROP INDEX 语句删除表的索引。

obclient> DROP INDEX test_index ON test;

插入数据

向表 t1 中插入一行数据。

obclient> INSERT INTO t1 VALUES(1,1);

向表 t1 中插入多行数据。

obclient> INSERT t1 VALUES(1,1),(2,default),(2+2,3*4);

支持INSERT INTO … SELECT …语句。

删除数据

删除表 t1 中按照 c2 列排序之后的第一行数据。

obclient> DELETE FROM t1 ORDER BY c2 LIMIT 1;

多表删除,删除 t1t2 表中 t1.c1 = t2.c1 的数据。

obclient> DELETE t1, t2 FROM t1, t2 WHERE t1.c1 = t2.c1;

更新数据

 将表 t1 中 t1.c1=1 对应的那一行数据的 c2 列值修改为 100

obclient> UPDATE t1 SET t1.c2 = 100 WHERE t1.c1 = 1;

 将表 t2 中 p2 分区的数据中 t2.c1 > 2 的对应行数据的 c2 列值修改为 100

obclient> UPDATE t2 partition(p2) SET t2.c2 = 100 WHERE t2.c1 > 2;

 多表联合更新。

obclient> UPDATE t1,t2 SET t1.c2 = 100, t2.c2 = 200 WHERE t1.c2 = t2.c2;
datetime不能插入'',要插入null,多行插入时结尾要带;

提交事务

如果使用 BEGIN 开启一个事务,执行 DML 语句后需要使用 COMMIT 提交事务;

obclient> BEGIN;
Query OK, 0 rows affected 

obclient> INSERT INTO t_insert(id,name) VALUES(4,'JP');
Query OK, 1 row affected 

obclient> COMMIT;
Query OK, 0 rows affected 

如果不显示地使用 BEGIN 开启事务,则一条 SQL 就是一个事务,不再需要提交事务。SQL 执行后您的修改即持久化成功,不可以用 ROLLBACK 语句回滚这些修改。

在提交事务(COMMIT)之前:

  • 您的修改只对当前会话可见,对其他数据库会话均不可见。

  • 您的修改没有持久化,您可以通过 ROLLBACK 语句撤销修改。

在提交事务(COMMIT)之后:

  • 您的修改对所有数据库会话可见。

  • 您的修改持久化成功,不能通过 ROLLBACK 语句回滚修改。

回滚事务

使用 ROLLBACK 语句回滚事务。

obclient> rollback;
Query OK, 0 rows affected (0.00 sec)

回滚一个事务指将事务的修改全部撤销。可以回滚当前整个未提交的事务,也可以回滚到事务中任意一个保存点。

创建视图

视图用来展示表的查询结果。大部分能使用表的地方,都可以使用视图。如果经常访问的数据分布在多个表里时,使用视图是最好的方法。

创建视图 stock_item。该视图内容取自 stock 和 item 两张表,两张表做表连接即可得到该视图。

obclient> CREATE  VIEW stock_item
     AS
     SELECT i_price, i_name, s_i_id
     FROM stok s, item i
     WHERE s.s_i_id = i.i_id;

修改视图

修改视图 stock_item。

obclient> CREATE OR REPLACE VIEW stock_item
     AS
     SELECT i_price, i_name, i_data, s_i_id, s_w_id, s_order_cnt
     FROM stok s, item i
     WHERE s.s_i_id = i.i_id;

删除视图

使用 DROP VIEW 语句删除一个或多个视图,删除视图并不会删除视图引用的表。

obclient> DROP VIEW V1;

创建同义词

 同义词是一个租户数据库对象的别名。使用同义词通常是为了管理权限方便,因为同义词可以隐藏另外一个数据对象的所有者权限。

使用 CREATE SYNONYM 语句来创建私有同义词s1,非当前数据库dqms的表test。

obclient> CREATE SYNONYM s1 for dqms.test;

使用 CREATE PUBLIC SYNONYM 语句来创建公共同义词。

删除一个私有同义词。

obclient> DROP SYNONYM test.s1;

删除一个私有同义词。

obclient> DROP PUBLIC SYNONYM syn_pub;

 

 

 


posted @ 2022-04-20 10:02  最萌小胡胡  阅读(3460)  评论(0编辑  收藏  举报