我想在一个查询结果中获取MySql表的所有CREATE语句。
例如,INFORMATION_SCHEMA包含所有表名称、注释等信息,但是MySql中的CREATE语句存储在哪里?是否可以检索所有表的一个查询中?
目前我正在检索1个表的TABLE ddl如下所示。 我有数百个表,因此我必须每次重复相同的步骤,这是一个耗时的过程。
show create table row_format;
我想在一个查询结果中获取MySql表的所有CREATE语句。
例如,INFORMATION_SCHEMA包含所有表名称、注释等信息,但是MySql中的CREATE语句存储在哪里?是否可以检索所有表的一个查询中?
目前我正在检索1个表的TABLE ddl如下所示。 我有数百个表,因此我必须每次重复相同的步骤,这是一个耗时的过程。
show create table row_format;
mysqldump -h localhost -u root -p --no-data --compact some_db
mysqldump -d --compact --compatible=mysql323 ${dbname}|egrep -v "(^SET|^/\*\!)"
今天我需要这个, mysqldump
答案 生成了一个.sql文件,但我无法导入:它声明了完整的CREATE TABLE
语句,并指向尚未声明的表的外键。
相反,我使用了Liquibase:
下载MySQL Connector/J(选择平台无关):https://dev.mysql.com/downloads/connector/j/
从您下载连接器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 --changeLogFile=schema.mysql.sql generateChangeLog
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;
有人向我展示了一种更简单的方法。
CREATE
语句不会被存储在任何地方。show create table
会从information_schema
中的数据重新创建它们。 - Barmar