我希望1个查询结果中的MySql Tables的所有 CREATE 语句。
例如, INFORMATION_SCHEMA 包含所有表名,注释等,但 CREATE 语句存储在MySql中的哪个位置?可以在一个查询中检索所有表吗?
目前我正在为1个表检索 TABLE ddl,如下所示。我有100个表,所以每次都可以重复相同的时间,这是时间的过程
show create table row_format;
答案 0 :(得分:19)
mysqldump -h localhost -u root -p --no-data --compact some_db
mysqldump -d --compact --compatible=mysql323 ${dbname}|egrep -v "(^SET|^/\*\!)"
How do I use mysqldump to export only the CREATE TABLE commands
答案 1 :(得分:1)
有人向我展示了一种更简单的方法。
答案 2 :(得分:0)
我今天需要这个,the mysqldump
answer 为我生成了一个我无法导入的 .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
这将为您的架构生成 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 :(得分:0)