我们举一个例子。 比如说 insert xx select * from xxx 现在 DBLE 是不支持的,但是我们可以通过 hint 这种方式来实现。所以 hint 目的就是指定路由结果,但实际执行的是 SQL 的内容。
Hint 的分类
DBLE 的 hint 一共分这几种(如图),一个是通过 SQL 来计算路由。一个是直接指明了我要下发的节点。第三种和我们之前说的有点不一样,就是在读写分离中,我强制要求我的 select 强制走主节点,也可以通过 hint 这种方式来指定的。
操作演示
我们用 hint 演示存储过程这样一个例子。我们还是通过 MySQL 的 DBLE 应用端入口。我们去看一下 tb_mod 这张表,看到有 5 行数据,比如说现在场景是我想删掉某一个节点上的数据。当然你可以通过写 SQL 的方式来,但是我们这个例子主要展现一个能力:我的某个存储过程在某个节点上建立以后我怎么去用 hint 调用它。
过程就很简单,其实就是 delete * from tb_mod 。但是它前面有一个有一个 hint 操作,指到 tb_mod=1这里。然后我执行一下这个存储过程 call 命令。执行成功后,1 和 5 这两条数据已经被删掉了。这样我们可以通过指定某个节点执行一些我们没办法在 DBLE 层面上做的事情,作为我们普通的一个 DBLE 支持的语法的扩展。类似 insert select * from table 等等语句都可以通过这种方式来执行。