生成所有MySql表的CREATE语句

22

我想在一个查询结果中获取MySql表的所有CREATE语句。

例如,INFORMATION_SCHEMA包含所有表名称、注释等信息,但是MySql中的CREATE语句存储在哪里?是否可以检索所有表的一个查询中?

目前我正在检索1个表的TABLE ddl如下所示。 我有数百个表,因此我必须每次重复相同的步骤,这是一个耗时的过程。

show create table row_format;

2
CREATE语句不会被存储在任何地方。show create table会从information_schema中的数据重新创建它们。 - Barmar
@Barmar:你能手动演示一下如何做而不是使用show命令检索吗?我将按照相同的逻辑提取所有创建语句在一个查询中。 - logan
我不知道除了执行大量的“show create table”语句之外还有其他方法。你为什么需要这样做?为什么不能从“information_schema”中获取你需要的特定信息? - Barmar
这对您来说可以吗?https://dev59.com/QmDVa4cB1Zd3GeqPhuez#9461887 - ajmalmhd04
@Barmar:我现在需要所有表的DDL,以便在另一个模式中运行它! - logan
4个回答

29

我无法将上述内容作为查询执行?我该如何在MySQL Workbench中执行它? - logan
它说, C:\Users\Toshiba>mysqldump -d --compact --compatible=mysql323 ${dbname}|egrep -v "(^SET|^/*!)" 'egrep' 不是内部或外部命令,也不是可运行的程序或批处理文件。 - logan
1
这些是Unix命令。你需要找出在Windows上的等效命令。 - Barmar
1
https://my.bluehost.com/cgi/help/298 这个在Windows上也可以使用。但是你需要从MySQL shell中执行它。 - Praveen Prasannan
1
cd C:\Program Files\MySQL\MySQL Server 5.0\bin - Praveen Prasannan
1
这个命令可能会生成非可执行语句。在我的情况下,它是在定义一个外键到另一个尚未创建的表。更智能的生成脚本将首先创建这两个表,然后修改一个表以引用另一个表。 - pyb

0

今天我需要这个, mysqldump答案 生成了一个.sql文件,但我无法导入:它声明了完整的CREATE TABLE语句,并指向尚未声明的表的外键。

相反,我使用了Liquibase

  1. 下载MySQL Connector/J(选择平台无关):https://dev.mysql.com/downloads/connector/j/

  2. 从您下载连接器jar的目录中,创建一个liquibase.properties文件并进行编辑:

outputDefaultSchema=true
includeSchema=true
driver=com.mysql.cj.jdbc.Driver
url=jdbc:mysql://localhost:3306/replace_with_your_db
username=replace with your MySQL user
password=replace with your MySQL password
classpath=full path of the MySQL connector, for instance C:\mysql-connector-java-8.0.21.jar
  • 安装 Liquibase 然后运行:
  • liquibase --changeLogFile=schema.mysql.sql generateChangeLog
    

    这将为您的模式生成SQL命令,全部按正确的顺序。
    例如:
    CREATE TABLE address (id BIGINT AUTO_INCREMENT NOT NULL, line VARCHAR(128) NULL, owner_id BIGINT NOT NULL);
    CREATE TABLE person (id BIGINT AUTO_INCREMENT NOT NULL, name VARCHAR(64) NOT NULL);
    ALTER TABLE address ADD CONSTRAINT fk_address_person FOREIGN KEY (owner_id) REFERENCES person (id) ON UPDATE RESTRICT ON DELETE RESTRICT;
    

    -3
    1. 选择所需的数据库
    2. 选择要显示创建表语句的表格(对于所有表格,请全选
    3. 单击下拉菜单选择操作:并选择显示创建

    -3

    有人向我展示了一种更简单的方法。

    1. 高亮所有表格。
    2. 右键单击。
    3. 选择“复制到剪贴板”,然后选择“创建语句”。
    4. 转到文本编辑器,粘贴即可查看所有内容。

    7
    这可能是你使用的数据库管理软件的特性。我知道MSSQL Management Studio有类似的功能。但是他们只列出了MySQL,据我所知,MySQL甚至没有默认的UI应用程序来管理它(也许是Workbench?),但是在我上次检查时,它没有右键功能。 - Nathan Champion
    它在我的工作台上运行良好。非常感谢@Curtis! - aish.a

    网页内容由stack overflow 提供, 点击上面的
    可以查看英文原文,
    原文链接