【发布时间】:2017-08-18 16:43:01
【问题描述】:
我有这张桌子:
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;
如果我将 create 与语句 ENGINE=MYSAM 一起使用,则以下查询有效,但如果我与引擎 InnoDB 一起使用,则无效。
如果我不进行聚合,或者如果我在 group by 中删除列字段 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
这里有一些屏幕截图显示,使用相同的查询,如果引擎不是 MISAM,则没有结果。
FIRST IMAGE:使用以下两个引擎运行我将在 CREATE WITH SELECT 语句中使用的查询:MYISAM 和 InnoDB。
第二个图像:在没有 ENGINE=MYISAM 的情况下运行查询。上面的结果预计会在新表resultado上,但不是:没有错误。
第三张图片:使用 ENGINE=MYISAM - 表 resultado 是神奇地创建的
【问题讨论】:
-
我对此进行了测试,使用 InnoDB 可以正常工作。请将确切的错误消息复制并粘贴到您上面的问题中。当您在 Stack Overflow 上询问有关错误的问题时,请始终包含错误消息的确切文本。
-
在下面的脚本中,一切都按预期工作db-fiddle。
-
Errors!=No errors。你能从 MySQL 命令行执行CREATE TABLE吗?。 -
为什么你把引擎放在开头而不像往常一样放在结尾?
-
@wchiquito - 当我在命令行运行时,mysql 显示错误:
ERROR 1365 (22012): Division by 0。奇怪的是,如果我使用相同的查询,我得到的结果没有上述错误,但如果我使用 CREATE 和 SELECT,错误是由 MySql 呈现的。更奇怪的是,如果ENGINE为MYISAM,则不会出现Mysql描述的错误,建表正常。