5

在我在 MySQL Workbench 中创建的数据库模型中,我定义了一个视图。Menu -> Database -> Forward Engineer当我现在从图表(或)生成 SQL 时Ctrl + G,将为我的视图创建此代码:

-- -----------------------------------------------------
-- Placeholder table for view `myview`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `myview` (...table columns...);
SHOW WARNINGS;

-- -----------------------------------------------------
-- View `myview`
-- -----------------------------------------------------
DROP VIEW IF EXISTS `myview` ;
SHOW WARNINGS;
DROP TABLE IF EXISTS `myview`;
SHOW WARNINGS;
DELIMITER $$
CREATE OR REPLACE VIEW `myview` AS

...view definition...

$$
DELIMITER ;

;
SHOW WARNINGS;


SET SQL_MODE=@OLD_SQL_MODE;
SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS;
SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS;

为什么要创建这个占位符表?

谢谢

4

1 回答 1

5

占位符被创建(不仅由 WB 也由 mysqldump 创建)来解决循环引用。视图定义可以引用需要该视图的表(或需要一个需要最终需要初始视图的视图的表的表)。这无法自动检测或解决,除非通过定义虚拟视图(暂时作为表,因为视图在大多数方面类似于表)然后在所有其他对象可用时重新定义它们。

于 2013-03-15T08:42:50.363 回答