要獲取 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 包含了完整的表結構定義,包括字段類型、約束、索引、存儲引擎和字符集等信息,可以完全用于重建相同的表結構。