同一个事务中同一条数据的多个update【或on duplicate key update】 cdc事件会被合并。
如果不是同一个事务,则不会被合并。
如下是示例:
CREATE TABLE `store_dml_test` (
`id` bigint(20) unsigned NOT NULL COMMENT 'id',
`store_id` bigint(20) unsigned NOT NULL COMMENT '店铺id',
`create_time` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '创建时间',
PRIMARY KEY (`id`) /*T![clustered_index] CLUSTERED */
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin
假如数据库该表中已经存在一条id=5653233197006196741:
如果连续执行如下3条update 语句【3个事务】,ticdc侧会订阅到3条update事件:
update store_dml_test set store_id = 50 where id = 5653233197006196741;
update store_dml_test set store_id = 51 where id = 5653233197006196741;
update store_dml_test set store_id = 52 where id = 5653233197006196741;
但如果是执行如下的3条update语句【在1个事务中】,ticdc侧只会订阅到最后1条update事件:
begin;
update store_mark_dml_test set store_id = 30 where id = 5653233197006196741;
update store_mark_dml_test set store_id = 31 where id = 5653233197006196741;
update store_mark_dml_test set store_id = where id = 5653233197006196741;
commit;
tidb是否有配置支持无论是哪一种情况,都能从ticdc侧订阅到3条消息,而不是只有1条。