mycat使用注意事项
1、 Mycat 不支持:下面这种语法。
DELETE d from 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