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
);

復制表結構和數據

不支持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;

修改列屬性,支持修改列名稱和列類型。修改列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;

刪除表

使用 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;

提交事務

如果使用 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;

 

 

 

 
                                          


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM