drds的update使用
阿新 • • 發佈:2019-01-14
報錯資訊:
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.