报错信息:
ERR-CODE: [TDDL-4601][ERR_EXECUTOR] not support cross db update
场景:
DRSD的建表结构是分库分表的,将C_CITY_INFO_FLOW表数据更新到C_CITY_INFO
分库分表两张表where条件后面,需要分库键相等,目前drds支持这种情况。
1.C_CITY_INFO建表语句
CREATE TABLE `C_CITY_INFO` (
`CITY_ID` BIGINT(16) NOT NULL,
`CITY_NAME` VARCHAR(16) COLLATE utf8_bin DEFAULT NULL,
`CITY_NO` BIGINT(16) NOT NULL,
`CITY_AREA` VARCHAR(16) COLLATE utf8_bin DEFAULT NULL,
`SPLIT_NO` VARCHAR(32) COLLATE utf8_bin DEFAULT NULL,
`INSERT_TIME` DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP ,
PRIMARY KEY (`CITY_ID`)
) ENGINE=INNODB DEFAULT CHARSET=UTF8 COLLATE=utf8_bin DBPARTITION BY HASH(`SPLIT_NO`)
2.C_CITY_INFO_FLOW建表语句
CREATE TABLE `C_CITY_INFO_FLOW` (
`ID` BIGINT(16) NOT NULL AUTO_INCREMENT BY SIMPLE ,
`CITY_ID` BIGINT(16) NOT NULL,
`CITY_NAME` VARCHAR(16) COLLATE utf8_bin DEFAULT NULL,
`CITY_NO` BIGINT(16) NOT NULL,
`CITY_AREA` VARCHAR(16) COLLATE utf8_bin DEFAULT NULL,
`SPLIT_NO` VARCHAR(32) COLLATE utf8_bin DEFAULT NULL ,
`FLOW_NO` VARCHAR(32) COLLATE utf8_bin DEFAULT NULL ,
`INSERT_TIME` DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP ,
PRIMARY KEY (`CITY_ID`)
) ENGINE=INNODB DEFAULT CHARSET=UTF8 COLLATE=utf8_bin DBPARTITION BY HASH(`SPLIT_NO`)
3.以上两张表是字段SPLIT_NO来分库
4.UPDATE语句如下:
UPDATE
C_CITY_INFO A,
C_CITY_INFO_FLOW B
SET
A.CITY_ID= B.CITY_ID,
A.CITY_NAME = B.CITY_NAME,
A.CITY_NO = B.CITY_NO,
A.CITY_AREA = B.CITY_AREA,
A.INSERT_TIME = B.INSERT_TIME
WHERE A.CITY_ID = B.CITY_ID
AND A.split_no ='562'
AND B.split_no='562'
AND B.FLOW_NO = '1234'
AND B.CITY_NO IN (123,456,789)
以上,TKS.