mycat使用注意事项

 

1、 Mycat 不支持:下面这种语法。

DELETEfrom hotspot d

 

 

 2、Mycat在heidisql客户端上列不出来表。但是可以正常使用。

 

 3、导数数据通过heidisql能很顺利导入。Navicat for MySQL很难导入,得用txt格式导入。

 

 4、1.6版本的mycat支持存储过程的创建 、调用。{通过前面加上注解,通过注解里面查询的表来确定要创建或者执行存储过程的库}。一定要记得去掉存储过程创建语句上的 权限定义部分。

 

/*!mycat: sql=select 1 from hotspot */

CREATE  PROCEDURE `create_data_extract`()

BEGIN

    DECLARE done INT DEFAULT 0;

    DECLARE b VARCHAR(20);

    DECLARE cur1 CURSOR FOR SELECT t.id

                            FROM hotspot t INNER JOIN v_student_net v ON t.name=v.username where t.id >(select IFNULL(max(h.kid),0) from hotspot_extarct h );

    DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = 0;

 

    SET done = (SELECT count(id) FROM hotspot t where t.id >(select IFNULL(max(h.kid),0) from hotspot_extarct h ));

    OPEN cur1;

 

    FETCH cur1

    INTO b;

    WHILE done > 0 DO

      CALL data_extract(b);

      FETCH cur1

      INTO b;

      SET done = done-1;

    END WHILE;

 

    CLOSE cur1;

  END

 

 

 

 

  

 5、

调用存储过程

 

/*!mycat: sql=select 1 from hotspot */ call create_data_extract()

 

 

 

 

 6、Mycat导入数据,注意事项

注意事项:

(1)、原始表的自增主键{AUTO_INCREMENT=1446}值,就是之前用掉的值,要去掉。新库按照新的来

(2)、{CREATE TABLE IF NOT EXISTS `edu_impoverish` }  改成  {CREATE TABLE `edu_impoverish` (}。mycat没有判断是否存在的功能

(3)、DROP TABLE IF EXISTS `onlinenum`; 这种格式是支持的。

(4)、全局表,字典表:可能会在其他表中存有其id字段的值。所以这些表id也要导过来。

(5)、业务表的id最好也导入过来,避免重新生成导致关联对不上的情况。

(6)、全局表、跨库分表都要用全局序列。单库单业务,不和其他关联的表;可以用数据库自带的自增主键。

 

 

 

 

 

 

 

 

 

7、表结构同步到mycat要做的修改

==============================================================================

7.1、第一种是原来的表自增主键,现在如果编程跨库的表了。则要换成全局序列主键。原始表的自增主键要去掉

 

ALTER TABLE `hotspot`

       ALTER `id` DROP DEFAULT;

ALTER TABLE `hotspot`

       CHANGE COLUMN `id` `id` INT(11) NOT NULL COMMENT '临时表id 与主id无关' FIRST;

      

 

 

==============================================================================

 

 

 

 

 

 

==============================================================================

7.2、mycat不支持联合主键:所以这个表改成自增主键。原来的联合主键变成:唯一约束     

ALTER TABLE `m_base_term`

       ADD COLUMN `id` BIGINT NOT NULL AUTO_INCREMENT FIRST,

       DROP PRIMARY KEY,

       ADD PRIMARY KEY (`id`),

       ADD UNIQUE INDEX `ecode_termid` (`ecode`, `termid`);

      

 

      

      

==============================================================================      

      

 

 

 

 

8、Mycat有一些不支持、或者支持不好的函数

8.1、IFNULL 如下图的sql。Mycat不会进行结果合并。而是返回三个结果。

 

SELECT

IFNULL(max(kid),0)

   as max

FROM access_record_inout_temp2

 

8.1.1、      所以要改成下面这种格式。

 

SELECT

MAX(t.max) as max

FROM

(

SELECT

IFNULL(max(id),0)

   as max

FROM m_rec_consume_copy

)t

 

posted @ 2018-01-22 10:22  double_kill  阅读(4502)  评论(0编辑  收藏  举报