Java教程

[zebra源码]不带分片键的sql会怎么执行?

本文主要是介绍[zebra源码]不带分片键的sql会怎么执行?,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

TableShardRule#eval 根据路由规则解析sql的时候如果没匹配找到分片键的值

// full table scan if is not insert sql.
if (type != SqlType.INSERT && type != SqlType.REPLACE) {
	if (forbidNoShardKeyWrite) {
		if (SqlType.UPDATE == type || SqlType.DELETE == type) {
			throw new ShardRouterException("Update or delete is forbidden without shard key!");
		}
	}
	return new ShardEvalResult(tableName, masterDimension.getAllDBAndTables());  // 返回所有的库表
} else {
	throw new ShardRouterException("Cannot find any shard columns in your insert sql.");
}
  1. 如果是 insert 或 replace 语句,必须提供分片键的值,不然直接报错
  2. 如果禁止不带分片键的写操作 forbidNoShardKeyWrite = true,则直接报错;否则返回所有的分库和分表,全表扫描
这篇关于[zebra源码]不带分片键的sql会怎么执行?的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!