阿里云
发表主题 回复主题
  • 4083阅读
  • 4回复

[用户交流]OceanBase对MySQL的兼容性简介

级别: 论坛版主
发帖
56
云币
138


简介


OceanBase目前兼容MySQL绝大部分常用用法。
数据服务的调用栈分析,OB对MySQL兼容性大概有如下几个方面:
  • 客户端:支持Navicat,Sequel 等客户端。部分mysql客户端工具的sql查询功能能用,管理功能可能不支持。
  • 接口层面: OceanBase兼容mysql协议,支持JDBC。应用使用JDBC可以像访问MySQL一样访问OceanBase的租户(mysql mode)。 建议JDBC版本 5.1.30,5.1.40 。
  • 数据模式层面:支持大部分数据库对象。如数据库(database)、表(table)、视图(view)、函数、增列、约束(主键、唯一键)、索引(普通索引、唯一索引、全文索引)等。OceanBase集群支持多租户(multi-tenant)。租户有两个mode,默认mode兼容MySQL SQL;oracle mode兼容ORACLE SQL。
  • 语句层面:参照MySQL 5.6的SQL语法,支持绝大部分常用语法。后面详述。
  • 数据类型层面:支持数值、字符串、时间、布尔类型、大对象(blob)等。
  • 系统对象层面:数据库的系统库(information_schema和mysql库)、系统表和系统视图等都支持。支持mysql的变量(variable)
  • 事务层面:支持Read-Committed隔离级别,支持MVCC(比MySQL更强,支持全局一致性快照读)。
  • 存储层面:不支持innodb或者其他引擎,OceanBase的数据存储格式是SSTable(sorted table string),还支持memtable。表数据组织形式是按主键的索引组织表。


支持的特性详述



支持MySQL协议


支持mysql packets,具体如下:
  • COM_CHANGE_USER
  • COM_HANDSHAKE
  • COM_INIT_DB
  • COM_LOGIN
  • COM_PING
  • COM_QUERY
  • COM_QUIT
  • COM_STATISTICS
  • COM_STMT_CLOSE
  • COM_STMT_EXECUTE
  • COM_STMT_PREPARE


DDL变更

  • 支持建表 CREATE TABLE
  • 支持表的列的部分场景变更(不修改数据的列类型变更,支持如int->bigint)
  • 支持建视图 CREATE VIEW
  • 支持存储过程(2.1以后版本)CREATE PROCEDURE
  • 支持用户自定义函数 CREATE FUNTION
  • 支持分区表 CREATE TABLE ... PARTITION BY ...
  • 支持临时表 CREATE TEMPORARY TABLE (2.1版本)
  • 支持全文索引(实现分词,只搜索关键字)(2.1版本)
  • 支持 CREATE TABLE AS SELECT ...(2.1版本)

数据库管理

  • 支持用户权限管理:CREATE USER, GRANT/REVOKE
  • 支持MYSQL的SCHEDULE作业
  • 支持创建DATABASE: CREATE/DROP DATABASE


支持的列类型

  • 数值类型:TINYINT, SMALLINT, MEDIUMINT, INT, INTEGER, BIGINT; DECIMAL/DEC, NUMERIC; FLOAT, DOUBLE; BIT;
  • 文本类型:CHAR, VARCHAR, BINARY, VARBINARY; ENUM, SET; TINYTEXT, TINYLOB, TEXT, MEDIUMTEXT; MEDIUMBLOB, LONGTEXT, LONGBLOB
  • 时间类型:DATE, TIME, YEAR, DATETIME, TIMESTAMP
  • 布尔类型:BOOL/BOOLEAN
  • 支持类型转换 CAST函数


字符集和字符比较规则

  • OB只支持两种字符集:utf8mb4 和binary。其中utf8mb4兼容utf8,gbk字符等。
  • 字符比较规则(Collation)支持:utf8mb4bin, utf8mb4general_ci, binary等,支持数据库级别、表级别和列级别设定字符比较规则。
  • 支持collate 关键字


支持表达式

  • 支持列引用, 列别名
  • 支持常量表达式
  • 支持有运算符的表达式
  • 支持函数表达式


支持运算符

  • 算术运算符:+ - * / DIV MOD/%(取余)
  • 位运算符: &(与) |(或) ~(取反) ^(异或) <<(逻辑左移) >>(逻辑右移)
  • 比较运算符: = <>/!= > >= < <= [NOT] IN, [NOT] BETWEEN AND; IS [NOT] TRUE, IS [NOT] FALSE;IS [NOT] NULL; <=>
  • 逻辑运算符: AND/&& OR/|| NOT/!
  • 日期运算符: + -
  • 字符串连接运算符: ||
  • 窗口函数:


支持函数

  • 日期时间函数:CURDATE/CURRENTDATE, CURRENTTIME/CURTIME, CURRENTTIMESTAMP, DATEADD, DATEFORMAT, DATESUB, DATEDIFF, EXTRACT, FROMDAYS, FROMUNIXTIME, MONTH, NOW, PERIODDIFF, STRTODATE, TIME, TIMETOUSEC, TIMEDIFF, TIMESTAMPDIFF, TIMESTAMPADD, TODAYS, USECTOTIME, UNIXTIMESTAMP, UTCTIMESTAMP, YEAR
  • 支持字符串函数:CONCAT, CONCATWS, SUBSTR, SUBSTRING, TRIM, LTRIM, RTRIM, ASCII, ORD, LENGTH, CHARLENGTH, UPPER, LOWER, HEX, UNHEX, MD5, INT2IP, IP2INT, LIKE, REGEXP, REPEAT, SPACE, SUBSTRINGINDEX, LOCATE, POSITION, INSTR, REPLACE, FIELD, ELT, INSERT, LPAD, RPAD, UUID, BIN, QUOTE, REGEXPSUBSTR
  • 类型转换函数:CAST
  • 数学函数:ROUND, CEIL, FLOOR, ABS, NEG, SIGN, CONV, MOD, POW/POWER, RAND
  • 比较函数: GREATEST, LEAST, ISNULL
  • 流控制函数:CASE, IF, IFNULL, NULLIF, ORA_DECODE
  • 聚集函数: AVG, COUNT, MAX, MIN, SUM, GROUP_CONCAT
  • 信息函数:found rows, LAST_INSERT_ID, COALESCE, NVL, SLEEP
  • 全文查找函数: MATCH ... AGAINST ...


支持的查询

  • 表连接:INNER JOIN, LEFT/RIGHT OUTER JOIN;连接执行计划支持NESTED-LOOP JOIN, MERGE JOIN, HASH JOIN, SEMI-JOIN, ANTI-JOIN
  • 支持order by
  • 支持子查询 以及 子查询展开
  • 支持集合: UNION, INTERSECT, EXCEPT/MINUS


其他

  • 支持load data infile(非local模式)加载数据(2.1版本)
  • 支持多表关联更新
  • 支持do/handler/call



暂不支持的特性


注:只列举常用的特性但是暂不支持的,且只是暂不支持,将来还是会支持的。

DDL

  • 暂不支持列类型变更(支持不修改数据的类型变更)。
  • 暂不支持将将字符列的前缀作为唯一索引。
  • 暂不支持增加/删除索引列
  • 暂不支持生成列定义修改
  • 暂不支持外键约束的新增和修改
  • 暂不支持可更新视图


SQL

  • 暂不支持 natural join, straight join
  • 暂不支持 load xml


数据库管理

  • 不支持帐号带ip来源,但增加了白名单功能


其他


OceanBase目前版本到2.x,还在继续迭代。SQL的功能会更加丰富,本文描述的个别点功能可能在后续版本发生变化。详细以实际拿到的OceanBase版本功能为准。也请关注OceanBase官网(https://oceanbase.alipay.com/ )和OceanBase论坛(https://bbs.aliyun.com/thread/439.html )。
有任何问题欢迎跟帖讨论。




[ 此帖被mq4096在2019-03-11 18:03重新编辑 ]
级别: 论坛版主
发帖
56
云币
138
只看该作者 沙发  发表于: 02-20
OceanBase详细SQL语法参见 OceanBase的SQL参考

如果要搭建OceanBase 集群,请参见 OceanBase手动部署步骤


如果没有条件搭建OceanBase集群,可以看看这个 OceanBase使用动画
[ 此帖被mq4096在2019-02-20 18:09重新编辑 ]
级别: 新人
发帖
3
云币
3
只看该作者 板凳  发表于: 03-11
ReOceanBase对MySQL的兼容性简介
LZ这是2.0的兼容性对比还是1.4的兼容性对比?
级别: 论坛版主
发帖
56
云币
138
只看该作者 地板  发表于: 03-11
回 2楼(EricSyh) 的帖子
这是2.1 的。
绝大部分1.4的也支持。 我标一下哪些是2.1的。
级别: 新人
发帖
3
云币
3
只看该作者 4楼 发表于: 03-12
回 3楼mq4096的帖子
好滴~
发表主题 回复主题
« 返回列表上一主题下一主题

限100 字节
如果您在写长篇帖子又不马上发表,建议存为草稿
 
验证问题: 57 - 20 = ?
上一个 下一个