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. 

猜你喜欢

转载自blog.csdn.net/zhangbeizhen18/article/details/86179951