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

我有这张 table :

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

SECOND IMAGE :运行不带ENGINE = MYISAM的查询 . 上面的结果预计会出现在新表 resultado 上,但它不是:没有错误 .

enter image description here

THIRD IMAGE :WITH ENGINE = MYISAM - 表 resultado 是神奇地创建的

enter image description here

回答(1)

2 years ago

我的版本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应该在终端或日志文件中记录错误 .

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