Mysql
MySQL 數據庫的 XML 轉儲不包含外鍵約束。可能是什麼原因?sqldump(.sql) 文件列出它
我正在以 XML 格式訪問數據庫的模式資訊。我正在使用以下命令以 XML 格式轉儲數據庫。
mysqldump –no-data –xml -u root -p bakerydb > bakerydb.xml
這些轉儲沒有列出外鍵約束。下面列出了部分輸出。
<table_structure name="class_details"> <field Field="id" Type="int(10)" Null="NO" Key="PRI" Extra="auto_increment" Comment="" /> <field Field="course_id" Type="int(10)" Null="NO" Key="MUL" Extra="" Comment="" /> <field Field="start_date" Type="date" Null="NO" Key="" Extra="" Comment="" /> <field Field="end_date" Type="date" Null="NO" Key="" Extra="" Comment="" /> <field Field="tutor_id" Type="int(10)" Null="NO" Key="MUL" Extra="" Comment="" /> <key Table="class_details" Non_unique="0" Key_name="PRIMARY" Seq_in_index="1" Column_name="id" Collation="A" Cardinality="0" Null="" Index_type="BTREE" Comment="" Index_comment="" /> <key Table="class_details" Non_unique="1" Key_name="fk_cources_offered_class_details" Seq_in_index="1" Column_name="course_id" Collation="A" Cardinality="0" Null="" Index_type="BTREE" Comment="" Index_comment="" /> <key Table="class_details" Non_unique="1" Key_name="fk_employee_details_class_details" Seq_in_index="1" Column_name="tutor_id" Collation="A" Cardinality="0" Null="" Index_type="BTREE" Comment="" Index_comment="" /> <options Name="class_details" Engine="InnoDB" Version="10" Row_format="Compact" Rows="0" Avg_row_length="0" Data_length="16384" Max_data_length="0" Index_length="32768" Data_free="7340032" Auto_increment="1" Create_time="2014-02-25 07:08:56" Collation="utf8_general_ci" Create_options="" Comment="" /> </table_structure>
同一個數據庫在 sqldump 中列出了詳細的外鍵約束。(.sql 文件)。下面提到了。
DROP TABLE IF EXISTS `class_details`; /*!40101 SET @saved_cs_client = @@character_set_client */; /*!40101 SET character_set_client = utf8 */; CREATE TABLE `class_details` ( `id` int(10) NOT NULL AUTO_INCREMENT, `course_id` int(10) NOT NULL, `start_date` date NOT NULL, `end_date` date NOT NULL, `tutor_id` int(10) NOT NULL, PRIMARY KEY (`id`), KEY `fk_cources_offered_class_details` (`course_id`), KEY `fk_employee_details_class_details` (`tutor_id`), CONSTRAINT `fk_employee_details_class_details` FOREIGN KEY (`tutor_id`) REFERENCES `employee_details` (`emp_id`), CONSTRAINT `fk_courses_offered_class_details` FOREIGN KEY (`course_id`) REFERENCES `courses_offered` (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
有人知道他們為什麼不列出父表資訊嗎?以及,我們如何獲得外鍵約束的細節?
PS:儲存引擎是 InnoDB。
這是
mysqldump
Oracle 將其描述為“功能請求”的錯誤。http://bugs.mysql.com/bug.php?id=66821
在正常模式下(不是 XML),
mysqldump
只使用來自SHOW CREATE TABLE tablename
.if (!opt_xml ... ... my_snprintf(buff, sizeof(buff), "show create table %s", result_table);
在
--xml
模式下執行時,mysqldump
使用SHOW KEYS FROM 'tablename'
不包括外鍵約束的輸出。my_snprintf(buff, sizeof(buff), "show keys from %s", result_table);
由於兩種不同的操作模式
mysqldump
從伺服器獲取數據的方式如此不同,因此將這些資訊添加到 XML 轉儲中並不是一個微不足道的改變。沒有一個簡單的解決方法,儘管如錯誤報告中所述,該資訊是可用的,如果您提供選項
information_schema
,您可以從中訪問它(不允許鎖定 information_schema)。您必須獲取您檢索的數據,解析和提取相關位,並根據需要重新格式化它,然後它才會變得如此有用。mysqldump``--skip-lock-tables