CREATE TABLE不适用于InnoDB,但适用于MyISAM

时间:2017-08-18 16:43:01

标签: mysql innodb myisam

我有这张桌子:

CREATE TABLE `peso_tec_dt_aj` (
  `idade` int(11) DEFAULT NULL,
  `tecnico` varchar(50) DEFAULT NULL,
  `obt` double DEFAULT NULL,
  `pad` decimal(4,3) DEFAULT NULL,
  `aves_peso` int(11) DEFAULT NULL,
  `data_domingo` datetime DEFAULT NULL,
  `data_domingo_ajustada` varchar(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL,
  KEY `peso_tec_dt_aj_idade_tecnico_index` (`idade`,`tecnico`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

下面的查询有效如果我使用带语句ENGINE = MYSAM的create,但不使用如果我使用引擎InnoDB。

如果我不进行聚合,或者我在组中删除了列字段data_domingo(DATETIME),它也会起作用:

CREATE TABLE bucket_15.resultado as (
    select 
    peso_tec_dt_aj.idade,
    peso_tec_dt_aj.tecnico, 
    (
        ROUND(
            SUM(peso_tec_dt_aj.obt * peso_tec_dt_aj.aves_peso) /
            SUM(peso_tec_dt_aj.aves_peso), 3
            )
    ) as campo_computeado
    from bucket_15.peso_tec_dt_aj 
    group by 
    peso_tec_dt_aj.idade,
    peso_tec_dt_aj.tecnico,
    peso_tec_dt_aj.data_domingo
);

运行此查询后,MySQL不会显示错误。没有create table的查询运行正常。

但是,上面的查询非常简单。为什么MySQL无法创建包含此列和数据的表?

MySQL版本:5.7

以下是一些屏幕截图,告诉您使用相同的查询,如果引擎不是MYISAM,则无效。

FIRST IMAGE :使用两个引擎运行我将在语句CREATE WITH SELECT上使用的查询:MYISAM和InnoDB。

enter image description here

第二张图片:运行不带ENGINE = MYISAM的查询。上面的结果预计会出现在新表resultado上,但它不是:没有错误。

enter image description here

第三张图片:WITH ENGINE = MYISAM - 表resultado 神奇地创建

enter image description here

1 个答案:

答案 0 :(得分:1)

此版本表可以通过我的5.6.35版本正常运行,没有任何错误

CREATE TABLE `peso_tec_dt_aj` (
  `idade` int(11) DEFAULT NULL,
  `tecnico` varchar(50) DEFAULT NULL,
  `obt` double DEFAULT NULL,
  `pad` decimal(4,3) DEFAULT NULL,
  `aves_peso` int(11) DEFAULT NULL,
  `data_domingo` datetime DEFAULT NULL,
  `data_domingo_ajustada` varchar(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL,
  KEY `peso_tec_dt_aj_idade_tecnico_index` (`idade`,`tecnico`)
) ENGINE=MYISAM DEFAULT CHARSET=latin1;

CREATE TABLE resultado as (
    select 
    peso_tec_dt_aj.idade,
    peso_tec_dt_aj.tecnico, 
    (
        ROUND(
            SUM(peso_tec_dt_aj.obt * peso_tec_dt_aj.aves_peso) /
            SUM(peso_tec_dt_aj.aves_peso), 3
            )
    ) as campo_computeado
    from bucket_15.peso_tec_dt_aj 
    group by 
    peso_tec_dt_aj.idade,
    peso_tec_dt_aj.tecnico,
    peso_tec_dt_aj.data_domingo
) ENGINE=MYISAM DEFAULT CHARSET=latin1;

关于第二个查询,如果它不起作用MySQL应该在终端或日志文件中记录错误。

在第二个创建查询中,您在名称中有一个点。这就是为什么它不起作用的原因。

相关问题