1. 程式人生 > >drds的update使用

drds的update使用

報錯資訊:
    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.