【问题标题】:Getting SHOW CREATE TABLE from a view, as if it were a table从视图中获取 SHOW CREATE TABLE,就好像它是一张表一样
【发布时间】:2021-11-23 21:20:15
【问题描述】:

我可以访问远程数据库,我想将几​​个视图的架构和数据转储到我的本地计算机上,并将其作为加载到我的本地数据库中> 以一种快速简便的方式。

我缺乏运行CREATE TABLE AS (SELECT * FROM target_view) 的用户权限,否则这将很容易解决。换句话说,我想检索并重新创建 target_view 的“复合”模式 就好像它是一个表

我确实想要SHOW CREATE VIEW 的输出,因为这仅显示了一个复杂的SELECT 语句,它连接到远程我无法访问的各种表。我在 MySQL 8.x 中看到的一个问题是,当我在视图上运行 SHOW CREATE TABLE 时,此命令只是充当 SHOW CREATE VIEW 的别名(这是合理的)。

令人沮丧的是,我可以运行DESCRIBE 并查看这些视图的架构,因为它们是表。我真的只需要将此信息转换为CREATE TABLE 语句,而实际上无法运行CREATE TABLE

如果不明显,关键是要避免手动重建这些视图的表格模式(因为它们将来可能会改变)。我还想避免对来自 CSV 转储的 20-30 个通用 VARCHAR 或 TEXT 列的通用表结构进行逆向工程的解决方案。

【问题讨论】:

  • 您可以在 dba.stackexchange.com 上找到这个问题的一个很好的答案。这是边缘的“管理员”问题。
  • 您是否有权运行 CREATE TEMPORARY TABLE?这不需要 CREATE 权限。
  • @BillKarwin 很好的建议,但不,我收到“拒绝访问”错误。
  • 好的,那么您可能也没有该特权。您可以通过SHOW GRANTS 声明进行确认。

标签: mysql mysql-8.0


【解决方案1】:

我不知道以 CREATE TABLE 语法显示结果集元数据的任何方法。

鉴于您的情况,我会首先在您的本地 MySQL 实例上创建基表和视图,然后您可以使用 CREATE TABLE AS SELECT ... 语法生成一个具体表以匹配视图结果集的元数据。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-27
    • 1970-01-01
    相关资源
    最近更新 更多