mysqldump 给出损坏的创建视图

问题描述 投票:0回答:1

当我在 MySql 中执行 mysqldump 时,视图没有被正确转储。

当我这样做时:

mysqldump --opt --user=root --routines --max_allowed_packet=1024M my_database > my_file.sql

我在 my_file.sql 中得到这个:

    CREATE VIEW my_view AS 
    SELECT
    1 AS id,
    1 AS full_name

在我的 MySql 服务器中,原始创建视图语句如下所示:

    CREATE VIEW my_view AS 
    SELECT
    t1.id AS id,
    CONCAT(t2.name,' ',t1.name) AS full_name
    FROM t1 
    LEFT JOIN t2 ON t1.t2_id = t2.id
    ORDER BY 
    t1.name,
    t2.name

我已经尝试了 mysqldump 的所有 differenet 选项,但是没有任何东西可以使它在转储的 sql 文件中正确地创建视图。

mysql
1个回答
1
投票

这是正常的 mysqldump 行为。带有

1 AS <column>
的视图是临时视图。转储输出中的真实视图较低。

演示:我在我的测试模式中创建了一个表

t
和一个视图
v

mysql> use test

mysql> create table t ( id int primary key );

mysql> create view v as select * from t;

然后我转储测试模式并检查输出。对于这个例子,我省略了一堆 mysqldump 输出。

-- MySQL dump 10.13  Distrib 8.0.32, for macos13 (arm64)

--
-- Table structure for table `t`
--

DROP TABLE IF EXISTS `t`;
CREATE TABLE `t` (
  `id` int NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;

--
-- Temporary view structure for view `v`
--

DROP TABLE IF EXISTS `v`;
/*!50001 DROP VIEW IF EXISTS `v`*/;
/*!50001 CREATE VIEW `v` AS SELECT 
 1 AS `id`*/;

--
-- Final view structure for view `v`
--

/*!50001 DROP VIEW IF EXISTS `v`*/;

/*!50001 CREATE ALGORITHM=UNDEFINED */
/*!50013 DEFINER=`root`@`localhost` SQL SECURITY DEFINER */
/*!50001 VIEW `v` AS select `t`.`id` AS `id` from `t` */;


-- Dump completed on 2023-03-28  9:12:32

可以看到评论先是临时视图,然后是真实视图。

© www.soinside.com 2019 - 2024. All rights reserved.