猿创征文|国产数据库之OceanBase的SQL详解
文章目录
- 1、创建数据库
- 2、表操作
- 2.1、创建表
- 2.2、查看表
- 2.3、修改表
- 2.4、删除表
- 3、索引操作
- 3.1、创建索引
- 3.2、查看索引
- 3.3、删除索引
- 4、插入数据
- 5、删除数据
- 6、更新数据
- 7、查询数据
- 8、提交事务
- 9、回滚事务
本文介绍了社区版 OceanBase 数据库的一些基本操作。
1、创建数据库
使用 CREATE DATABASE 语句创建数据库。
示例如下:
创建数据库 test1,并指定字符集为 UTF8MB4。
obclient> CREATE DATABASE test1 DEFAULT CHARACTER SET UTF8MB4;
Query OK, 1 row affected
创建读写属性的数据库 test2。
obclient> CREATE DATABASE test2 READ WRITE;
Query OK, 1 row affected
使用 USE DATABASE 切换到 test1 数据库中。
obclient> USE test1;
Database changed
使用 SHOW DATABASES 列出当前数据库服务器中所有的数据库。
obclient> SHOW DATABASES;
+--------------------+
| Database |
+--------------------+
| oceanbase |
| test1 |
+--------------------+
7 rows in set
2、表操作
在 OceanBase 数据库中,表是最基础的数据存储单元。表包含了所有用户可以访问的数据,每个表包含多行记录,每个记录由多个列组成。
2.1、创建表
使用 CREATE TABLE 语句在数据库中创建新表。
obclient> CREATE TABLE test (c1 int primary key, c2 VARCHAR(3));
2.2、查看表
使用 SHOW CREATE TABLE 语句查看建表语句。
obclient> SHOW CREATE TABLE test;
使用 DESCRIBE TABLE 语句查看建表信息。
示例如下:
obclient> DESCRIBE test;
使用 SHOW TABLES 语句查看指定数据库中的所有表。
obclient> SHOW TABLES FROM test;
2.3、修改表
使用 ALTER TABLE 语句来修改已存在的表的结构,包括修改表及表属性、新增列、修改列及属性、删除列等。
示例如下:
把表 test 的字段 c2 改名为 c3,并同时修改其字段类型。
obclient> DESCRIBE test;
+-------+------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+------------+------+-----+---------+-------+
| c1 | int(11) | NO | PRI | NULL | |
| c2 | varchar(3) | YES | | NULL | |
+-------+------------+------+-----+---------+-------+obclient> ALTER TABLE test CHANGE COLUMN c2 c3 VARCHAR(10);
Query OK, 0 rows affected
obclient> DESCRIBE test;
+-------+----------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+----------+------+-----+---------+-------+
| c1 | int(11) | NO | PRI | NULL | |
| c3 | char(10) | YES | | NULL | |
+-------+----------+------+-----+---------+-------+
增加、删除列
增加列前,执行 DESCRIBE 命令查看表信息。
obclient> DESCRIBE test;
+-------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| c1 | int(11) | NO | PRI | NULL | |
| c2 | varchar(3) | YES | | NULL | |
+-------+-------------+------+-----+---------+-------+
2 rows in set
执行以下命令,增加 c3 列。
obclient> ALTER TABLE test ADD c3 int;
Query OK, 0 rows affected
增加列后,通过 DESCRIBE 命令查看表信息。
obclient> DESCRIBE test;
+-------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| c1 | int(11) | NO | PRI | NULL | |
| c2 | varchar(3) | YES | | NULL | |
| c3 | int(11) | YES | | NULL | |
+-------+-------------+------+-----+---------+-------+
3 rows in set
执行以下命令,删除 c3 列。
obclient> ALTER TABLE test DROP c3;
Query OK, 0 rows affectedobclient> DESCRIBE test;
+-------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| c1 | int(11) | NO | PRI | NULL | |
| c2 | varchar(50) | YES | | NULL | |
+-------+-------------+------+-----+---------+-------+
2 rows in set
设置表 test 的副本数,并且增加列 c5。
obclient> ALTER TABLE test SET REPLICA_NUM=2, ADD COLUMN c5 INT;
Query OK, 0 rows affected
obclient> DESCRIBE test;
+-------+------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+------------+------+-----+---------+-------+
| c1 | int(11) | NO | PRI | NULL | |
| c2 | varchar(3) | YES | | NULL | |
| c5 | int(11) | YES | | NULL | |
+-------+------------+------+-----+---------+-------+
3 rows in set
2.4、删除表
使用 DROP TABLE 语句删除表。
示例如下:
obclient> DROP TABLE test;
或
obclient> DROP TABLE IF EXISTS test;
3、索引操作
索引是创建在表上并对数据库表中一列或多列的值进行排序的一种结构。其作用主要在于提高查询的速度,降低数据库系统的性能开销。
3.1、创建索引
使用 CREATE INDEX 语句创建表的索引。
示例:
执行以下命令,创建表 test。
obclient> CREATE TABLE test (c1 int primary key, c2 VARCHAR(10));
执行以下命令,创建表 test 的索引。
obclient> CREATE INDEX test_index ON test (c1, c2);
3.2、查看索引
使用 SHOW INDEX 语句查看表的索引。
示例如下:
查看表 test 的索引。
obclient> SHOW INDEX FROM test;
3.3、删除索引
使用 DROP INDEX 语句删除表的索引。
示例如下:
删除表 test 的索引。
obclient> DROP INDEX test_index ON test;
4、插入数据
使用 INSERT 语句在已经存在的表中插入数据。
示例如下:
假设有如下所示数据的表 t1。
obclient> CREATE TABLE t1(c1 int primary key, c2 int) partition BY key(c1) partitions 4;
Query OK, 0 rows affected
向表 t1 中插入一行数据。
obclient> INSERT INTO t1 VALUES(1,1);
Query OK, 1 row affectedobclient> SELECT * FROM t1;
+----+------+
| c1 | c2 |
+----+------+
| 1 | 1 |
+----+------+
1 row in set
向表 t1 中插入多行数据。
obclient> INSERT t1 VALUES(1,1),(2,default),(2+2,3*4);
Query OK, 3 rows affected
Records: 3 Duplicates: 0 Warnings: 0obclient> SELECT * FROM t1;
+----+------+
| c1 | c2 |
+----+------+
| 1 | 1 |
| 2 | NULL |
| 4 | 12 |
+----+------+
3 rows in set
5、删除数据
使用 DELETE 语句删除数据。
示例如下:
假设有如下所示数据的表 t1 和 t2。其中,表 t2 为 KEY 分区表,且分区名由系统根据分区命令规则自动生成,即分区名为 p0、p1、p2、p3。
obclient> CREATE TABLE t1(c1 int primary key, c2 int);
Query OK, 0 rows affected
obclient> INSERT t1 VALUES(1,1),(2,2),(3,3),(4,4);
Query OK, 4 rows affectedobclient> SELECT * FROM t1;
+----+------+
| c1 | c2 |
+----+------+
| 1 | 1 |
| 2 | 2 |
| 3 | 3 |
| 4 | 4 |
+----+------+
4 rows in setobclient> CREATE TABLE t2(c1 int primary key, c2 int) partition BY key(c1) partitions 4;
Query OK, 0 rows affected
obclient> INSERT INTO t2 VALUES(5,5),(1,1),(2,2),(3,3);
Query OK, 4 rows affected
obclient> SELECT * FROM t2;
+----+------+
| c1 | c2 |
+----+------+
| 5 | 5 |
| 1 | 1 |
| 2 | 2 |
| 3 | 3 |
+----+------+
4 rows in set
单表删除,删除 c1=2 的行,其中 c1 列为表 t1 中的 Primary Key。
obclient> DELETE FROM t1 WHERE c1 = 2;
Query OK, 1 row affectedobclient> SELECT * FROM t1;
+----+------+
| c1 | c2 |
+----+------+
| 1 | 1 |
| 3 | 3 |
| 4 | 4 |
+----+------+
3 rows in set
单表删除,删除表 t1 中按照 c2 列排序之后的第一行数据。
obclient> DELETE FROM t1 ORDER BY c2 LIMIT 1;
Query OK, 1 row affectedobclient> SELECT * FROM t1;
+----+------+
| c1 | c2 |
+----+------+
| 2 | 2 |
| 3 | 3 |
| 4 | 4 |
+----+------+
3 rows in set
单表删除,删除表 t2 的 p2 分区的数据。
obclient> SELECT * FROM t2 PARTITION(p2);
+----+------+
| c1 | c2 |
+----+------+
| 1 | 1 |
| 2 | 2 |
| 3 | 3 |
+----+------+
3 rows in setobclient> DELETE FROM t2 PARTITION(p2);
Query OK, 3 rows affectedobclient> SELECT * FROM t2;
+----+------+
| c1 | c2 |
+----+------+
| 5 | 5 |
+----+------+
1 row in set
多表删除,删除 t1、t2 表中 t1.c1 = t2.c1 的数据。
obclient> DELETE t1, t2 FROM t1, t2 WHERE t1.c1 = t2.c1;
Query OK, 3 rows affectedobclient> SELECT * FROM t1;
+----+------+
| c1 | c2 |
+----+------+
| 4 | 4 |
+----+------+
1 row in setobclient> SELECT * FROM t2;
+----+------+
| c1 | c2 |
+----+------+
| 5 | 5 |
+----+------+
1 row in set
多表删除,删除 t1、t2 表中 t1.c1 = t2.c1 的数据。
obclient> DELETE FROM t1, t2 USING t1, t2 WHERE t1.c1 = t2.c1;
Query OK, 4 rows affectedobclient> SELECT * FROM t1;
+----+------+
| c1 | c2 |
+----+------+
| 4 | 4 |
+----+------+
1 row in setobclient> SELECT * FROM t2;
+----+------+
| c1 | c2 |
+----+------+
| 5 | 5 |
+----+------+
1 row in set
6、更新数据
使用 UPDATE 语句修改表中的字段值。
示例如下:
创建示例表 t1 和 t2。
obclient> CREATE TABLE t1(c1 int primary key, c2 int);
Query OK, 0 rows affected
obclient> INSERT t1 VALUES(1,1),(2,2),(3,3),(4,4);
Query OK, 4 rows affected
Records: 4 Duplicates: 0 Warnings: 0
obclient> SELECT * FROM t1;
+----+------+
| c1 | c2 |
+----+------+
| 1 | 1 |
| 2 | 2 |
| 3 | 3 |
| 4 | 4 |
+----+------+
4 rows in set obclient> CREATE TABLE t2(c1 int primary key, c2 int) partition by key(c1) partitions 4;
Query OK, 0 rows affected
obclient> INSERT t2 VALUES(5,5),(1,1),(2,2),(3,3);
Query OK, 4 rows affected
Records: 4 Duplicates: 0 Warnings: 0
obclient> SELECT * FROM t2;
+----+------+
| c1 | c2 |
+----+------+
| 5 | 5 |
| 1 | 1 |
| 2 | 2 |
| 3 | 3 |
+----+------+
4 rows in set
将表 t1 中 t1.c1=1 对应的那一行数据的 c2 列值修改为 100。
obclient> UPDATE t1 SET t1.c2 = 100 WHERE t1.c1 = 1;
Query OK, 1 row affected
Rows matched: 1 Changed: 1 Warnings: 0obclient> SELECT * FROM t1;
+----+------+
| c1 | c2 |
+----+------+
| 1 | 100 |
| 2 | 2 |
| 3 | 3 |
| 4 | 4 |
+----+------+
4 rows in set
将表 t1 中按照 c2 列排序的前两行数据的 c2 列值修改为 100。
obclient> UPDATE t1 set t1.c2 = 100 ORDER BY c2 LIMIT 2;
Query OK, 2 rows affected
Rows matched: 2 Changed: 2 Warnings: 0obclient> SELECT * FROM t1;
+----+------+
| c1 | c2 |
+----+------+
| 1 | 100 |
| 2 | 100 |
| 3 | 3 |
| 4 | 4 |
+----+------+
4 rows in set
将表 t2 中 p2 分区的数据中 t2.c1 > 2 的对应行数据的 c2 列值修改为 100。
obclient> SELECT * FROM t2 partition (p2);
+----+------+
| c1 | c2 |
+----+------+
| 1 | 1 |
| 2 | 2 |
| 3 | 3 |
+----+------+
3 rows in setobclient> UPDATE t2 partition(p2) SET t2.c2 = 100 WHERE t2.c1 > 2;
Query OK, 1 row affected
Rows matched: 1 Changed: 1 Warnings: 0obclient> SELECT * FROM t2 partition (p2);
+----+------+
| c1 | c2 |
+----+------+
| 1 | 1 |
| 2 | 2 |
| 3 | 100 |
+----+------+
3 rows in set
修改多个表。对于表 t1 和表 t2 中满足 t1.c2 = t2.c2 对应行的数据,将表 t1 中的 c2 列值修改为 100,表 t2 中的 c2 列值修改为 200。
obclient> UPDATE t1,t2 SET t1.c2 = 100, t2.c2 = 200 WHERE t1.c2 = t2.c2;
Query OK, 6 rows affected
Rows matched: 6 Changed: 6 Warnings: 0obclient> SELECT * FROM t1;
+----+------+
| c1 | c2 |
+----+------+
| 1 | 100 |
| 2 | 100 |
| 3 | 100 |
| 4 | 4 |
+----+------+
4 rows in set
obclient> SELECT * FROM t2;
+----+------+
| c1 | c2 |
+----+------+
| 5 | 5 |
| 1 | 200 |
| 2 | 200 |
| 3 | 200 |
+----+------+
4 rows in set
7、查询数据
使用 SELECT 语句查询表中的内容。
示例如下:
假设有如下所示数据的表 a。
obclient> CREATE TABLE a (id int, name varchar(50), num int);
Query OK, 0 rows affectedobclient> INSERT INTO a VALUES(1,'a',100),(2,'b',200),(3,'a',50);
Query OK, 3 rows affected
Records: 3 Duplicates: 0 Warnings: 0obclient> SELECT * FROM a;
+------+------+------+
| ID | NAME | NUM |
+------+------+------+
| 1 | a | 100 |
| 2 | b | 200 |
| 3 | a | 50 |
+------+------+------+
3 rows in set
从表 a 中读取 name 的数据。
obclient> SELECT name FROM a;
+------+
| NAME |
+------+
| a |
| b |
| a |
+------+
3 rows in set
在查询结果中对 name 进行去重处理。
obclient> SELECT DISTINCT name FROM a;
+------+
| NAME |
+------+
| a |
| b |
+------+
2 rows in set
从表 a 中根据筛选条件 name = ‘a’ ,输出对应的 id 、name 和 num。
obclient> SELECT id, name, num FROM a WHERE name = 'a';
+------+------+------+
| ID | NAME | NUM |
+------+------+------+
| 1 | a | 100 |
| 3 | a | 50 |
+------+------+------+
2 rows in set
8、提交事务
使用 COMMIT 语句提交事务。
在提交事务(COMMIT)之前:
您的修改只对当前会话可见,对其他数据库会话均不可见。
您的修改没有持久化,您可以通过 ROLLBACK 语句撤销修改。
在提交事务(COMMIT)之后:
您的修改对所有数据库会话可见。
您的修改持久化成功,不能通过 ROLLBACK 语句回滚修改。
示例如下:
obclient> INSERT INTO t_insert(id,name) VALUES(4,'JP');
Query OK, 1 row affectedobclient> COMMIT;
Query OK, 0 rows affectedobclient> exit;
Bye[user@host ~]$obclient -h10.10.10.1 -u******@obmysql#obdemo -P2883 -p**1*** TPCC
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.obclient> SELECT * FROM t_insert;
+----+------+-------+---------------------+
| ID | NAME | VALUE | GMT_CREATE |
+----+------+-------+---------------------+
| 1 | CN | 10001 | 2020-04-02 17:52:31 |
| 2 | US | 10002 | 2020-04-02 17:52:38 |
| 3 | EN | 10003 | 2020-04-02 17:52:38 |
| 4 | JP | NULL | 2020-04-02 17:53:34 |
+----+------+-------+---------------------+
4 rows in set
9、回滚事务
使用 ROLLBACK 语句回滚事务。
回滚一个事务指将事务的修改全部撤销。可以回滚当前整个未提交的事务,也可以回滚到事务中任意一个保存点。如果要回滚到某个保存点,必须结合使用 ROLLBACK 和 TO SAVEPOINT 语句。
其中:
如果回滚整个事务,则:事务会结束所有的修改会被丢弃清除所有保存点释放事务持有的所有锁如果回滚到某个保存点,则:事务不会结束保存点之前的修改被保留,保存点之后的修改被丢弃清除保存点之后的保存点(不包括保存点自身)释放保存点之后事务持有的所有锁
示例如下:
回滚事务的全部修改:
obclient> SELECT * FROM t_insert;
+----+------+-------+---------------------+
| ID | NAME | VALUE | GMT_CREATE |
+----+------+-------+---------------------+
| 1 | CN | 10001 | 2020-04-02 17:52:31 |
| 2 | US | 10002 | 2020-04-02 17:52:38 |
| 3 | EN | 10003 | 2020-04-02 17:52:38 |
+----+------+-------+---------------------+
3 rows in setobclient> BEGIN;
Query OK, 0 rows affected obclient> INSERT INTO t_insert(id, name, value) VALUES(4,'JP',10004);
Query OK, 1 row affectedobclient> INSERT INTO t_insert(id, name, value) VALUES(5,'FR',10005),(6,'RU',10006);
Query OK, 2 rows affected
Records: 2 Duplicates: 0 Warnings: 0obclient> SELECT * FROM t_insert;
+----+------+-------+---------------------+
| ID | NAME | VALUE | GMT_CREATE |
+----+------+-------+---------------------+
| 1 | CN | 10001 | 2020-04-02 17:52:31 |
| 2 | US | 10002 | 2020-04-02 17:52:38 |
| 3 | EN | 10003 | 2020-04-02 17:52:38 |
| 4 | JP | 10004 | 2020-04-02 17:53:34 |
| 5 | FR | 10005 | 2020-04-02 17:54:53 |
| 6 | RU | 10006 | 2020-04-02 17:54:53 |
+----+------+-------+---------------------+
6 rows in setobclient> ROLLBACK;
Query OK, 0 rows affected obclient> SELECT * FROM t_insert;
+----+------+-------+---------------------+
| ID | NAME | VALUE | GMT_CREATE |
+----+------+-------+---------------------+
| 1 | CN | 10001 | 2020-04-02 17:52:31 |
| 2 | US | 10002 | 2020-04-02 17:52:38 |
| 3 | EN | 10003 | 2020-04-02 17:52:38 |
+----+------+-------+---------------------+
3 rows in set
猿创征文|国产数据库之OceanBase的SQL详解相关推荐
- 猿创征文 | 国产数据库实战之使用Docker部署OceanBase 数据库
猿创征文 | 国产数据库实战之使用Docker部署OceanBase 数据库 一.OceanBase 介绍 1.OceanBase介绍 2.OceanBase特点 3.OceanBase 数据库基础概 ...
- 猿创征文 | 国产数据库之openGauss的单机主备部署及快速入门
猿创征文 | 国产数据库之openGauss的单机主备部署及快速入门 一.openGauss介绍 1.openGauss简介 2.openGauss特点 3.openGauss的逻辑架构图 二.环境检 ...
- 猿创征文 | 国产数据库实战之TiDB 数据库快速入门
猿创征文 | 国产数据库实战之TiDB 数据库快速入门 一.系统检查 1.检查系统版本 2.查看本地IP地址 3.TiDB集群介绍 二.快速部署本地测试集群 1.安装 TiUP工具 2.声明全局环境变 ...
- 猿创征文 | 国产数据库之PolarDB-X数据库详解安装和使用
文章目录 1.PolarDB-X是什么? 2.PolarDB-X架构 3.PolarDB-X架构优势 4.PolarDB-X核心特性 5.PolarDB-X部署 5.1.通过PXD部署集群 5.2.通 ...
- 猿创征文 | 国产数据库之DM数据库详解安装和使用
文章目录 1.DM数据库简介 2.DM数据库基本概念介绍 3.DM数据库体系结构介绍 3.1.DM物理结构 3.2.DM内存结构 4.DM数据库的安装 4.1.Windows安装DM数据库 4.2.L ...
- 猿创征文 | 国产数据库之gsql详解和使用方法
文章目录 1.创建数据(语句:CREATE) 3.插入数据(语句:INSERT INTO) 4.更新数据(语句:UPDATE) 5.删除数据(语句:DEFAULT) 6.查询数据(语句:SELECT) ...
- 猿创征文 | 国产数据库TiDB架构特性
前言 TiDB 是 PingCAP 公司自主设计.研发的开源分布式关系型数据库,是一款同时支持在线事务处理与在线分析处理 (Hybrid Transactional and Analytical Pr ...
- 猿创征文 | 国产数据库之OpenGauss数据库详解安装和使用
文章目录 1.OpenGauss简介 2.OpenGauss系统架构 3.OpenGauss特点 4.OpenGauss基本概念 5.OpenGauss应用场景 6.OpenGauss的安装 6.1. ...
- 猿创征文 | 国产数据实战之docker部署MyWebSQL数据库管理工具
猿创征文 | 国产数据实战之docker部署MyWebSQL数据库管理工具 一.MyWebSQL介绍 1.MyWebSQL简介 2.MyWebSQL特点 二.检查本地环境 1.检查docker状态 2 ...
最新文章
- 使用MongoDB存储Docker日志(续)
- C# Random循环生成随机数重复问题解决方案
- [mmu/cache]-ARMV8的cache的维护指令介绍
- C++之string类
- 常用的HTTP状态码
- Linux学习笔记(二十二)yum更换国内源、yum下载rpm包、源码包安装
- C#LeetCode刷题-随机数
- 二分查找与 bisect 模块
- NGN学习笔记1——NGN的基本概念和体系结构
- 澳门智能公交调度系统客户端GUI设计
- Nuvoton M0518 之 程序烧录备注
- 未转变者服务器关雨指令,Unturned未转变者3.21版本物品ID代码汇总
- 微信html5电子相册,如何快速制作微信H5电子相册?
- 新中大连接服务器文件,新中大软件服务器地址修改
- 一阶电路实验报告心得_电路实训心得体会
- 单身程序狗解决了一个技术难题后,没有妹子可以炫耀,怎么办?
- 思科交换机 DHCP 服务配置
- 自动阅读项目到底能不能做?看成本分析再决定
- 我的世界服务器如何修改天气,我的世界怎么改变天气 我的世界改变天气指令代码大全...
- 数学建模学习(22):求解微积分之积分问题详解,超详细!
热门文章
- 如何用Python做词云?(基础篇视频教程)
- 计算机网络实验六,陕师大 计算机网络实验6wireshark
- 代购系统搭建,淘宝、1688海外代购系统建设以及部分前端源码展示。
- 【单选按钮区域实现三选一】【2018腾讯手游排行榜】【HTML表格标签】【网页设计与网站开发HTML、CSS、JavaScript】【第七章】表单——实验作业题【实验3、4、5】
- 回顾强大的图片影视软件
- 天翼云Web应用防火墙(边缘云版)通过首批可信认证
- 深度学习必备书籍——《Python深度学习 基于Pytorch》
- 简洁唯美的 WanAndroid 客户端
- angualr2 下载文件的两种方式
- 【对话机器人】开源机器人项目介绍