MySql 8.0.24:转储/还原失败,嵌套视图在不同组上具有汇总功能 问题

MySql 8.0.24:转储/还原失败,嵌套视图在不同组上具有汇总功能 问题,mysql,view,distinct,restore,rollup,Mysql,View,Distinct,Restore,Rollup,假设有以下两种观点 CREATE VIEW v2 AS SELECT 4711 AS XYZ; 转储、还原转储文件并调用 显示创建视图v1 导致以下错误: FAILS with ERROR 1064 (42000) at line 1: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use n

假设有以下两种观点

CREATE VIEW v2 AS SELECT 4711 AS XYZ;
转储、还原转储文件并调用
显示创建视图v1
导致以下错误:

FAILS with ERROR 1064 (42000) at line 1: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'distinct count(distinct 4711)) AS `B` from `dbfail`.`v2` group by `A` with rollu' at line 1
据我所知,转储文件看起来还可以。我认为导入/还原无法处理它。 当然,上面的例子在商业上没有意义。这就归结为我们面临的问题的本质

它很好用
  • 在8.0.18中
  • 不使用“汇总”修改器
  • 或者没有明确的计数
  • 或者当v2是一个表时
  • 或者令人惊讶的是,实际上这篇文章的原因。。。 失败取决于视图的名称。更准确地说,它们在转储文件中的外观! 如果我们切换视图v1v2的名称,则其确定
如何重复 我正在使用MySql 8.0.24访问macOS Catalina

这里有一种在终端(mac)上测试事实的便捷方法。(可以将其打包到脚本中)

第一部分是工作部分,第二部分由于切换视图名称而失败

SCHEMA=dbok
INNERVIEWNAME=v1
OUTERVIEWNAME=v2
mysql -e "DROP DATABASE IF EXISTS $SCHEMA; \
          CREATE DATABASE $SCHEMA; \
          USE $SCHEMA; \
          CREATE VIEW $INNERVIEWNAME AS SELECT 4711 AS anything; \
          CREATE VIEW $OUTERVIEWNAME AS SELECT 4711 AS A, COUNT(DISTINCT(4711)) AS B FROM $INNERVIEWNAME GROUP BY A WITH ROLLUP; \
          SHOW CREATE VIEW $OUTERVIEWNAME;"
rm -rf ./$SCHEMA.mysql
mysqldump $SCHEMA > ./$SCHEMA.mysql
mysql $SCHEMA < ./$SCHEMA.mysql
mysql -e "USE $SCHEMA; SHOW CREATE VIEW $OUTERVIEWNAME;"
SCHEMA=dbok
INNERVIEWNAME=v1
OUTERVIEWNAME=v2
mysql-e“删除数据库,如果存在$SCHEMA\
创建数据库$SCHEMA\
使用$SCHEMA\
创建视图$INNERVIEWNAME作为选择4711作为任意项\
创建视图$OUTERVIEWNAME作为选择4711作为A,使用汇总从$INNERVIEWNAME组中计数(DISTINCT(4711))作为B\
显示创建视图$OUTERVIEWNAME;”
rm-rf./$SCHEMA.mysql
mysqldump$SCHEMA>/$SCHEMA.mysql
mysql$SCHEMA<./$SCHEMA.mysql
mysql-e“使用$SCHEMA;显示创建视图$OUTERVIEWNAME;”
SCHEMA=dbfail
INNERVIEWNAME=v2
OUTERVIEWNAME=v1
mysql-e“删除数据库,如果存在$SCHEMA\
创建数据库$SCHEMA\
使用$SCHEMA\
创建视图$INNERVIEWNAME作为选择4711作为任意项\
创建视图$OUTERVIEWNAME作为选择4711作为A,使用汇总从$INNERVIEWNAME组中计数(DISTINCT(4711))作为B\
显示创建视图$OUTERVIEWNAME;”
rm-rf./$SCHEMA.mysql
mysqldump$SCHEMA>/$SCHEMA.mysql
mysql$SCHEMA<./$SCHEMA.mysql
mysql-e“使用$SCHEMA;显示创建视图$OUTERVIEWNAME;”
我怎样才能克服这个问题?
当然,除了改名!。还有其他人也面临这个问题吗?是否有适当的解决方案(例如转储还原参数)?我还没有找到任何关于这个问题的评论…

在mysql 8.0.23中,mysqldump如下所示,我在其中看不到正确的
CREATE VIEW
语句

可能您发现了一个bug,应该向以下部门报告:

编辑:哎呀,我一直认为在哪里(有很多)评论,但是:


该问题在8.0.26中已修复。请参见

如果可以重复,请按照您的建议制作错误报告,谢谢!到MySql错误报告
SCHEMA=dbok
INNERVIEWNAME=v1
OUTERVIEWNAME=v2
mysql -e "DROP DATABASE IF EXISTS $SCHEMA; \
          CREATE DATABASE $SCHEMA; \
          USE $SCHEMA; \
          CREATE VIEW $INNERVIEWNAME AS SELECT 4711 AS anything; \
          CREATE VIEW $OUTERVIEWNAME AS SELECT 4711 AS A, COUNT(DISTINCT(4711)) AS B FROM $INNERVIEWNAME GROUP BY A WITH ROLLUP; \
          SHOW CREATE VIEW $OUTERVIEWNAME;"
rm -rf ./$SCHEMA.mysql
mysqldump $SCHEMA > ./$SCHEMA.mysql
mysql $SCHEMA < ./$SCHEMA.mysql
mysql -e "USE $SCHEMA; SHOW CREATE VIEW $OUTERVIEWNAME;"
SCHEMA=dbfail
INNERVIEWNAME=v2
OUTERVIEWNAME=v1
mysql -e "DROP DATABASE IF EXISTS $SCHEMA; \
          CREATE DATABASE $SCHEMA; \
          USE $SCHEMA; \
          CREATE VIEW $INNERVIEWNAME AS SELECT 4711 AS anything; \
          CREATE VIEW $OUTERVIEWNAME AS SELECT 4711 AS A, COUNT(DISTINCT(4711)) AS B FROM $INNERVIEWNAME GROUP BY A WITH ROLLUP; \
          SHOW CREATE VIEW $OUTERVIEWNAME;"
rm -rf ./$SCHEMA.mysql
mysqldump $SCHEMA > ./$SCHEMA.mysql
mysql $SCHEMA < ./$SCHEMA.mysql
mysql -e "USE $SCHEMA; SHOW CREATE VIEW $OUTERVIEWNAME;"
-- MySQL dump 10.13  Distrib 8.0.23, for Win64 (x86_64)
--
-- Host: localhost    Database: test
-- ------------------------------------------------------
-- Server version   8.0.23

/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!50503 SET NAMES utf8mb4 */;
/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */;
/*!40103 SET TIME_ZONE='+00:00' */;
/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;
/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;

--
-- Temporary view structure for view `v1`
--

DROP TABLE IF EXISTS `v1`;
/*!50001 DROP VIEW IF EXISTS `v1`*/;
SET @saved_cs_client     = @@character_set_client;
/*!50503 SET character_set_client = utf8mb4 */;
/*!50001 CREATE VIEW `v1` AS SELECT 
 1 AS `A`,
 1 AS `B`*/;
SET character_set_client = @saved_cs_client;

--
-- Final view structure for view `v1`
--

/*!50001 DROP VIEW IF EXISTS `v1`*/;
/*!50001 SET @saved_cs_client          = @@character_set_client */;
/*!50001 SET @saved_cs_results         = @@character_set_results */;
/*!50001 SET @saved_col_connection     = @@collation_connection */;
/*!50001 SET character_set_client      = cp850 */;
/*!50001 SET character_set_results     = cp850 */;
/*!50001 SET collation_connection      = cp850_general_ci */;
/*!50001 CREATE ALGORITHM=UNDEFINED */
/*!50013 DEFINER=`luuk`@`%` SQL SECURITY DEFINER */
/*!50001 VIEW `v1` AS select rollup_group_item(1,0) AS `A`,rollup_sum_switcher(distinct count(distinct 1)) AS `B` from `v2` group by `A` with rollup */;
/*!50001 SET character_set_client      = @saved_cs_client */;
/*!50001 SET character_set_results     = @saved_cs_results */;
/*!50001 SET collation_connection      = @saved_col_connection */;
/*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */;

/*!40101 SET SQL_MODE=@OLD_SQL_MODE */;
/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */;
/*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */;
/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;

-- Dump completed on 2021-05-04 19:37:14