sharding-jdbc SQL支持详细列表

本文列举了分布式数据库支持的SQL种类,包括SELECT、INSERT、UPDATE和DELETE等语句,并明确了不支持的SQL类型,如子查询、特定类型的INSERT语句等。
部署运行你感兴趣的模型镜像

SQL支持详细列表

由于SQL语法灵活复杂,分布式数据库和单机数据库的查询场景又不完全相同,难免有和单机数据库不兼容的SQL出现。 本文详细罗列出已明确可支持的SQL种类以及已明确不支持的SQL种类,尽量让使用者避免踩坑。 其中必然有未涉及到的SQL欢迎补充,未支持的SQL也尽量会在未来的版本中支持。

全局不支持项

动态表

未配置逻辑表和真实表对应关系的真实表,称为动态表。凡是动态表且未在SQLHint中包含分片键的SQL均不支持。 原因是未找到分片键则需全路由,但由于未配置逻辑表和真实表的对应关系,无法全路由。

DQLDML以外的语句

Sharding-JDBC定位于CRUD操作,目前仅针对DQLDML语句进行支持。

子查询未详细测试

支持的SQL

DQL

SELECT主语句
SELECT select_expr [, select_expr ...] FROM table_reference [, table_reference ...]
[WHERE where_condition] 
[GROUP BY {col_name | position} [ASC | DESC]] 
[ORDER BY {col_name | position} [ASC | DESC], ...] 
[LIMIT {[offset,] row_count | row_count OFFSET offset}]
select_expr
* | 
COLUMN_NAME [AS] [alias] | 
(MAX | MIN | SUM | AVG)(COLUMN_NAME | alias) [AS] [alias] | 
COUNT(* | COLUMN_NAME | alias) [AS] [alias]
table_reference
tbl_name [AS] alias] [index_hint_list] | 
table_reference ([INNER] | {LEFT|RIGHT} [OUTER]) JOIN table_factor [JOIN ON conditional_expr | USING (column_list)] | 
示例
SQL 无条件支持 必要条件
SELECT * FROM tbl_name 
SELECT * FROM tbl_name WHERE col1 = val1 ORDER BY col2 DESC LIMIT limit 
SELECT COUNT(*), SUM(col1), MIN(col1), MAX(col1), AVG(col1) FROM tbl_name WHERE col1 = val1 
SELECT COUNT(col1) FROM tbl_name WHERE col2 = val2 GROUP BY col1 ORDER BY col3 DESC LIMIT offset, limit 
SELECT * FROM tbl_name WHERE col1 = val1 OR col2 = val2 

DML

INSERT
SQL 无条件支持 必要条件
INSERT INTO tbl_name (col1, col2,…) VALUES (val1, val2,….)插入列需要包含分片键
INSERT INTO tbl_name VALUES (val1, val2,….)通过Hint注入分片键
UPDATE
SQL 无条件支持 必要条件
UPDATE tbl_name SET col1 = val1 WHERE col2 = val2 
DELETE
SQL 无条件支持 必要条件
DELETE FROM tbl_name WHERE col1 = val1 

不支持的SQL

SQL
INSERT INTO tbl_name (col1, col2, …) VALUES (val1, val2,....), (val3, val4,....)
INSERT INTO tbl_name (col1, col2, …) SELECT col1, col2, ... FROM tbl_name WHERE col3 = val3
INSERT INTO tbl_name SET col1 = val1
SELECT DISTINCT * FROM tbl_name WHERE column1 = value1
SELECT COUNT(col1) as count_alias FROM tbl_name GROUP BY col1 HAVING count_alias > val1
SELECT * FROM tbl_name1 UNION SELECT * FROM tbl_name2
SELECT * FROM tbl_name1 UNION ALL SELECT * FROM tbl_name2

您可能感兴趣的与本文相关的镜像

HunyuanVideo-Foley

HunyuanVideo-Foley

语音合成

HunyuanVideo-Foley是由腾讯混元2025年8月28日宣布开源端到端视频音效生成模型,用户只需输入视频和文字,就能为视频匹配电影级音效

### 解析和调试 Sharding-JDBC SQL 日志 当遇到 `IllegalStateException: no table route info` 这类异常时,表明在执行SQL过程中未能找到合适的路由信息。这通常意味着Sharding-JDBC无法确定目标数据节点来处理特定的查询或操作。 为了有效解析和调试Sharding-JDBC生成的日志,可以采取以下几个方面的方法: #### 启用详细的日志记录 确保应用程序配置文件中启用了足够的日志级别以便于追踪问题所在。对于Sharding-JDBC而言,在`application.properties`或者`application.yml`里设置如下参数可以帮助获取更详尽的信息[^1]: ```yaml logging.level.io.shardingsphere.core.rule.ShardingRule=DEBUG logging.level.io.shardingsphere.infra.metadata.schema.SchemaMetaDataLoader=DEBUG ``` 这些设置允许开发者查看有关分片规则以及元数据加载过程中的详细情况,从而更容易定位到具体错误原因。 #### 检查原始SQL与转换后的SQL差异 根据描述,“原本的SQL语句是`INSERT INTO voucher_order`”,而经过ShardingSphere-SQL捕获之后变为`INSERT INTO tb_voucher_order_2()`。这种变化暗示着可能存在不匹配的情况——即实际插入的数据表名称并未按照预期被正确映射至对应的物理表上[^4]。因此建议仔细对比原生SQL同最终被执行版本之间的区别,并确认所有涉及字段名、条件表达式等都得到了恰当处理。 #### 验证分片键及其算法定义准确性 如果应用了自定义逻辑用于决定如何分配不同类型的请求给各个子表,则需特别注意这部分实现是否合理可靠。例如,在订单管理系统案例研究中提到利用快速入门指南完成了对订单表实施水平拆分的工作;此时应确保所使用的分片策略能够覆盖全部可能场景并保持一致性[^2]。 另外值得注意的是,任何关于分片键的选择或是哈希函数的设计都需要充分考虑到业务需求特点,以避免因不当设计而导致性能瓶颈甚至功能缺陷的发生。 #### 审视环境变量及依赖项冲突 有时外部因素也可能引发意想不到的行为模式。比如上述提及的文章展示了怎样借助SPI机制配合Nacos服务注册中心来进行shardingsphere-jdbc v5.5.0的相关部署工作[^5]。在此基础上还需留意是否存在其他第三方组件干扰正常流程的可能性,尤其是涉及到多个框架共同协作的情况下更要小心谨慎地排查潜在风险点。 综上所述,针对Sharding-JDBC产生的SQL日志进行深入剖析不仅有助于及时发现并修复现有漏洞,同时也为进一步优化整体架构提供了宝贵依据。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值