在MySQL和SQL Server上查询生成表DDL

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

有没有一种简单的方法可以使用 Ms 或 My SQL 服务器通过查询来提取表 DDL 信息? (最好两者都有?)

例如,使用MySQL Administrator / Navicat for MySql,有一个“DDL”函数,它生成“create table foo (....)”脚本。

有什么方法可以从查询本身获取这些信息,例如:

Select DDL from foo where table_name='bar';

有“创建表格栏(.....)”返回给我吗?

如果没有 - 有什么建议吗?

mysql database ddl
4个回答
86
投票

它是 mysql 特定的,但是

SHOW CREATE TABLE <table-name>
为您提供了表的 DDL。


4
投票

你必须自己创建它。

可以查询

INFORMATION_SCHEMA.COLUMNS
获取列名和数据类型。


1
投票

您无法以跨平台方式获取

CREATE Table
文本,但您可以从
INFORMATION_SCHEMA
视图中获取足够的信息来自行构建它。


0
投票

我认为您正在寻找类似的东西。

这些查询生成的结果您可以复制和粘贴或用于自动化:

基于 “在 MySQL 数据库每个表的字段中搜索文本”的查询

桌子


SELECT
CONCAT('SHOW CREATE TABLE '
     , CAST(CHAR(96) AS CHAR(8) CHARACTER SET LATIN1), `TABLE_SCHEMA`, CAST(CHAR(96) AS CHAR(8) CHARACTER SET LATIN1)
     , CAST(CHAR(46) AS CHAR(8) CHARACTER SET LATIN1)
     , CAST(CHAR(96) AS CHAR(8) CHARACTER SET LATIN1), `TABLE_NAME`, CAST(CHAR(96) AS CHAR(8) CHARACTER SET LATIN1)
     , CAST(CHAR(59) AS CHAR(8) CHARACTER SET LATIN1)
      ) AS QUERY_GENERATOR
FROM `INFORMATION_SCHEMA`.`TABLES`
WHERE
      UPPER(`TABLE_SCHEMA`)
        NOT IN (
                'INFORMATION_SCHEMA'
              , 'MYSQL'
              , 'PERFORMANCE_SCHEMA'
              , 'SAKILA'
              , 'SYS'
              , 'WORLD'
               )
  AND UPPER(`TABLE_TYPE`) = 'BASE TABLE'
ORDER BY 1;

观点


SELECT
CONCAT('SHOW CREATE VIEW '
     , CAST(CHAR(96) AS CHAR(8) CHARACTER SET LATIN1), `TABLE_SCHEMA`, CAST(CHAR(96) AS CHAR(8) CHARACTER SET LATIN1)
     , CAST(CHAR(46) AS CHAR(8) CHARACTER SET LATIN1)
     , CAST(CHAR(96) AS CHAR(8) CHARACTER SET LATIN1), `TABLE_NAME`, CAST(CHAR(96) AS CHAR(8) CHARACTER SET LATIN1)
     , CAST(CHAR(59) AS CHAR(8) CHARACTER SET LATIN1)
      ) AS QUERY_GENERATOR
FROM `INFORMATION_SCHEMA`.`TABLES`
WHERE
      UPPER(`TABLE_SCHEMA`)
        NOT IN (
                'INFORMATION_SCHEMA'
              , 'MYSQL'
              , 'PERFORMANCE_SCHEMA'
              , 'SAKILA'
              , 'SYS'
              , 'WORLD'
               )
  AND UPPER(`TABLE_TYPE`) = 'VIEW'
ORDER BY 1
;

存储过程/例程


SELECT
CONCAT('SHOW CREATE PROCEDURE '
     , CAST(CHAR(96) AS CHAR(8) CHARACTER SET LATIN1), `ROUTINE_SCHEMA`, CAST(CHAR(96) AS CHAR(8) CHARACTER SET LATIN1)
     , CAST(CHAR(46) AS CHAR(8) CHARACTER SET LATIN1)
     , CAST(CHAR(96) AS CHAR(8) CHARACTER SET LATIN1), `ROUTINE_NAME`, CAST(CHAR(96) AS CHAR(8) CHARACTER SET LATIN1)
     , CAST(CHAR(59) AS CHAR(8) CHARACTER SET LATIN1)
      ) AS QUERY_GENERATOR
FROM `INFORMATION_SCHEMA`.`ROUTINES`
WHERE
      UPPER(`ROUTINE_SCHEMA`)
        NOT IN (
                'INFORMATION_SCHEMA'
              , 'MYSQL'
              , 'PERFORMANCE_SCHEMA'
              , 'SAKILA'
              , 'SYS'
              , 'WORLD'
               )
ORDER BY 1
;
© www.soinside.com 2019 - 2024. All rights reserved.