要获取 MySQL 中某个表的完整创建 DDL(仅结构,不含数据),可以使用 mysqldump
工具的以下命令:
基本命令格式
bash
mysqldump -h [主机名] -u [用户名] -p --no-data --single-transaction --routines --triggers --add-drop-table [数据库名] [表名]
实际示例(获取 class_students 表的 DDL)
bash
mysqldump -h localhost -u root -p --no-data --single-transaction --routines --triggers --add-drop-table --compact --complete-insert school_db class_students
参数说明
参数 | 说明 |
---|---|
-h |
指定 MySQL 主机地址 |
-u |
指定用户名 |
-p |
提示输入密码 |
--no-data |
只导出表结构,不导出数据 |
--single-transaction |
使用事务保证数据一致性 |
--routines |
包含存储过程和函数 |
--triggers |
包含触发器 |
--add-drop-table |
在 CREATE TABLE 前添加 DROP TABLE 语句 |
--compact |
产生更紧凑的输出 |
--complete-insert |
使用完整的 INSERT 语句格式 |
输出示例
执行命令后会得到类似这样的完整 DDL:
sql
DROP TABLE IF EXISTS `class_students`; /*!40101 SET @saved_cs_client = @@character_set_client */; /*!50503 SET character_set_client = utf8mb4 */; CREATE TABLE `class_students` ( `student_id` int NOT NULL AUTO_INCREMENT, `student_name` varchar(50) NOT NULL, `gender` enum('男','女') NOT NULL, `age` tinyint unsigned NOT NULL, `birth_date` date DEFAULT NULL, `address` varchar(100) DEFAULT NULL, `phone` varchar(20) DEFAULT NULL, `email` varchar(50) DEFAULT NULL, `enrollment_date` date NOT NULL, `class_id` int NOT NULL, PRIMARY KEY (`student_id`), KEY `idx_class_id` (`class_id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci; /*!40101 SET character_set_client = @saved_cs_client */;
其他有用选项
获取更详细的元数据信息:
bash
mysqldump --no-data --tab=/tmp --fields-terminated-by=, --fields-enclosed-by='"' --lines-terminated-by=0x0d0a school_db class_students
将输出保存到文件:
bash
mysqldump -u root -p --no-data school_db class_students > class_students_ddl.sql
这样导出的 DDL 包含了完整的表结构定义,包括字段类型、约束、索引、存储引擎和字符集等信息,可以完全用于重建相同的表结构。