开发者社区 问答 正文

OceanBase SQL尚不支持的功能以及需要注意的地方


OceanBase支持SQL 92与兼容MySQL, 原则上只要是MySQL的语法,OceanBase都能运行,本节列出一些尚不支持的功能以及需要注意的地方。

尚不支持的功能

  • 不支持可更新视图、存储过程、触发器、游标。
  • 不支持用户自定义数据类型、自定义函数。
  • 不支持某些数据类型,比如不支持blob、text、enum、set。
  • 不支持临时表。
  • 分区表不支持分区管理。
  • 不支持load data。
  • 不支持select … into。
  • 不支类似IF,WHILE等流程控制类语句;不支持类似BEGIN…END,LOOP…END LOOP,REPEAT…UNTIL…END REPEAT, WHILE…DO…END WHILE等复合语句。
  • 分区表不支持INSERT/REPLACE语句中的带SELECT子句的修改。
  • 不支持DELETE语句多表删除,不支持UPDATE多表更新。
  • SELECT…FOR UPDATE只支持单表查询。
  • 某些函数不支持,具体支持函数请参考函数章节。
  • 不支持alter add column before|after。
  • 不支持某些列类型的变更,比如从varchar变更为int。


需要注意的点

  • 如果你的表使用了分区,则有可能被分布到多台单独的物理机上(目前公测规格不会)。
  • insert/update/delete单条语句不能跨分区,如果有跨分区的需求,需要写成事务。
  • 一般来说,select需要带上分区键。
  • 不支持prepare, OceanBase不需要你使用prepare。
  • 字符集目前只支持utf8和utf8mb4。

展开
收起
云栖大讲堂 2017-11-01 14:00:37 3967 分享 版权
阿里云 AI 助理回答

OceanBase作为阿里云自研的分布式数据库,它在设计上追求高度兼容SQL标准以及MySQL语法,以降低用户迁移和使用成本。不过,正如您所提到的,尽管OceanBase在很多方面与MySQL保持一致,但仍存在一些当前版本尚未支持的功能和需要注意的特性,这些细节对于计划使用或正在使用OceanBase的用户来说非常重要。

尚不支持的功能

  1. 程序化与高级SQL结构:OceanBase目前不支持可更新视图、存储过程、触发器、游标等,这意味着依赖这些功能的应用可能需要进行相应的调整。
  2. 数据类型限制:部分MySQL中的数据类型如BLOB、TEXT、ENUM、SET等在OceanBase中不受支持,这要求在设计表结构时选择其他兼容的数据类型。
  3. 临时表与特定操作:不支持创建临时表,也不支持LOAD DATA导入数据、SELECT INTO导出数据,以及分区表的动态管理(如添加/删除分区)。
  4. 复合语句与流程控制:缺乏对IF、WHILE等流程控制语句的支持,以及BEGIN…END等复合语句的使用,这可能影响到复杂逻辑的实现。
  5. 多表操作限制:在DELETE和UPDATE操作中不支持跨多个表,SELECT…FOR UPDATE也仅限于单表查询,这要求在处理关联数据时采取不同的策略。

需要注意的点

  1. 分区表的分布性:虽然公测规格可能不会将数据分散到多台物理机,但理论上,分区表的数据可以分布在集群的不同节点上,因此在执行写操作时需注意事务的使用以保证数据一致性。
  2. 查询性能优化:在查询时带上分区键能显著提升查询效率,因为这有助于OceanBase直接定位到数据所在的分区,减少不必要的数据扫描。
  3. 字符集限制:目前仅支持UTF8和UTF8MB4,确保应用字符编码与此相符,避免字符集不匹配导致的问题。
  4. 预编译语句:OceanBase不支持PREPARE语句,意味着应用程序在准备执行多次的SQL语句时,可能需要采用其他方式来优化性能或安全性。

综上所述,虽然OceanBase在兼容性和性能上有其独特优势,但在实际部署和开发过程中,用户需要根据上述限制调整应用逻辑和数据库设计,以充分利用其分布式数据库的优势。随着OceanBase的持续迭代升级,未来可能会逐步增加对更多特性的支持。

有帮助
无帮助
AI 助理回答生成答案可能存在不准确,仅供参考
0 条回答
写回答
取消 提交回答