Not allow DML operation without sharding conditions解决
文章目录
使用ShardingSphere做数据库分片,当使用查询条件不包含分片字段时,就会报错:Not allow DML operation without sharding conditions。如果我要查询时不带分片字段条件,该如何处理呢?
步骤一:
server.yaml设置proxy-hint-enabled为true
|
|
步骤二:
config-sharding.yaml设置为allow-range-query-with-inline-sharding: true
|
|
说明:关于allow-range-query-with-inline-sharding字段,用到的有行表达式分片算法和复合行表达式分片算法。
以下是算法属性说明:
参考自官方文档:https://shardingsphere.apache.org/document/5.0.0/cn/features/sharding/concept/inline-expression/
行表达式分片算法
类型:INLINE
属性名称 | 数据类型 | 说明 | 默认值 |
---|---|---|---|
algorithm-expression | String | 分片算法的行表达式 | - |
allow-range-query-with-inline-sharding (?) | boolean | 是否允许范围查询。注意:范围查询会无视分片策略,进行全路由 | false |
复合行表达式分片算法
类型:COMPLEX_INLINE
属性名称 | 数据类型 | 说明 | 默认值 |
---|---|---|---|
sharding-columns (?) | String | 分片列名称,多个列用逗号分隔。如不配置无法则不能校验 | - |
algorithm-expression | String | 分片算法的行表达式 | - |
allow-range-query-with-inline-sharding (?) | boolean | 是否允许范围查询。注意:范围查询会无视分片策略,进行全路由 | false |
步骤三:
MySQL 客户端连接,默认是–skip-comments 过滤注释,要使用SQL Hint 功能,需要添加-c 选项保留注释,或–comments,例如:
|
|
步骤四:
查询时带上注释hint
|
|
或者
|
|
效果如下:
文章作者 HiOFD
上次更新 2024-04-10