目录
百战程序员,全站22050+开发课程+文档 ,学习精选优质好课快人一步!观看视频 快捷键ALT+N

JAVA全系列 教程

3762个小节阅读:7090k

收藏
全部开发者教程

C语言快速入门

JAVA全系列 教程

面向对象的程序设计语言

Python全系列 教程

Python3.x版本,未来主流的版本

人工智能 教程

顺势而为,AI创新未来

大厂算法 教程

算法,程序员自我提升必经之路

C++ 教程

一门通用计算机编程语言

微服务 教程

目前业界流行的框架组合

web前端全系列 教程

通向WEB技术世界的钥匙

大数据全系列 教程

站在云端操控万千数据

AIGC全能工具班

A

A A

White Night

阅读(847)
赞(0)

SQL使用规范

兼容全部常用的路由至单数据节点的SQL; 路由至多数据节点的SQL由于场景复杂,分为稳定支持、实验性支持和不支持这三种情况

  1. 稳定支持

    全面支持 DQL、DML、DDL、DCL、TCL 和常用 DAL。 支持分页、去重、排序、分组、聚合、表关联等复杂查询。

    常规查询

    • SELECT 主语句

    • select_expr

    • table_reference

    子查询

    • 子查询和外层查询同时指定分片键,且分片键的值保持一致时,由内核提供稳定支持。

  2. 实验性支持

    实验性支持特指使用 Federation 执行引擎提供支持。 该引擎处于快速开发中,用户虽基本可用,但仍需大量优化,是实验性产品。

    • 子查询

    子查询和外层查询未同时指定分片键,或分片键的值不一致时,由 Federation 执行引擎提供支持,例如:

    • 跨库关联查询

    当关联查询中的多个表分布在不同的数据库实例上时,由 Federation 执行引擎提供支持。 假设 t_order 和 t_order_item是多数据节点的分片表,并且未配置绑定表规则,t_user和 t_user_role是分布在不同的数据库实例上的单表,那么 Federation 执行引擎能够支持如下常用的关联查询。

  3. 不支持

    以下 CASE WHEN 语句不支持:

    CASE WHEN 中包含子查询

    CASE WHEN 中使用逻辑表名(请使用表别名)

不支持的 SQL原因解决方案
INSERT INTO tbl_name (col1, col2, …) SELECT * FROM tbl_name WHERE col3 = ?SELECT 子句不支持 * 和内置分布式主键生成器
REPLACE INTO tbl_name (col1, col2, …) SELECT * FROM tbl_name WHERE col3 = ?SELECT 子句不支持 * 和内置分布式主键生成器
SELECT MAX(tbl_name.col1) FROM tbl_name查询列是函数表达式时,查询列前不能使用表名使用表别名

实时效果反馈

2. 下列ShardingJdbc不支持的sql语句是哪个?

A SELECT * FROM (SELECT * FROM t_order) o WHERE o.order_id = 1;

B SELECT USER_id,USER_NAME, (CASE WHEN SEX=1 THEN '男' WHEN SEX=2 THEN '女' END) AS SEX FROM SYS_USER

C SELECT * FROM t_order o INNER JOIN t_order_item i ON o.order_id = i.order_id WHERE o.order_id = 1;

D SELECT * FROM t_order_item i RIGHT JOIN t_user_role r ON i.user_id = r.user_id WHERE i.user_id = 1;

答案

2=>B

ShardingJDBC_分片流程解析 ShardingJDBC_行表达式

北京市昌平区回龙观镇南店村综合商业楼2楼226室

©2014-2023 百战卓越(北京)科技有限公司 All Rights Reserved.

京ICP备14032124号-2