| Bug #66821 | Include referenced table name for Foreign Key in mysqldump XML output | ||
|---|---|---|---|
| Submitted: | 14 Sep 2012 14:44 | Modified: | 3 Feb 2013 17:43 |
| Reporter: | Danny Kopping | Email Updates: | |
| Status: | Verified | Impact on me: | |
| Category: | MySQL Server: mysqldump Command-line Client | Severity: | S4 (Feature request) |
| Version: | 5.5.27 | OS: | Any |
| Assigned to: | CPU Architecture: | Any | |
| Tags: | fk, mysqldump, XML | ||
[14 Sep 2012 14:44]
Danny Kopping
[17 Sep 2012 7:01]
Valeriy Kravchuk
I'd call this a bug actually (incomplete information returned), not just a feature request:
mysql> create table t1(id int primary key, c1 int);
Query OK, 0 rows affected (0.31 sec)
mysql> create table t2(id int primary key, c1 int, foreign key(c1) references t1
(id));
Query OK, 0 rows affected (0.67 sec)
mysql> show create table t2\G
*************************** 1. row ***************************
Table: t2
Create Table: CREATE TABLE `t2` (
`id` int(11) NOT NULL,
`c1` int(11) DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `c1` (`c1`),
CONSTRAINT `t2_ibfk_1` FOREIGN KEY (`c1`) REFERENCES `t1` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8
1 row in set (0.06 sec)
mysql> exit
Bye
C:\Program Files\MySQL\MySQL Server 5.5\bin>mysqldump -X -d -uroot -proot -P3312
test --tables t2
<?xml version="1.0"?>
<mysqldump xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<database name="test">
<table_structure name="t2">
<field Field="id" Type="int(11)" Null="NO" Key="PRI" Extra="" Co
mment="" />
<field Field="c1" Type="int(11)" Null="YES" Key="MUL" Extra="" C
omment="" />
<key Table="t2" Non_unique="0" Key_name="PRIMARY" Seq_in_index="
1" Column_name="id" Collation="A" Cardinality="0" Null="" Index_type="BTREE" Com
ment="" Index_comment="" />
<key Table="t2" Non_unique="1" Key_name="c1" Seq_in_index="1" Co
lumn_name="c1" Collation="A" Cardinality="0" Null="YES" Index_type="BTREE" Comme
nt="" Index_comment="" />
<options Name="t2" Engine="InnoDB" Version="10" Row_format="Comp
act" Rows="0" Avg_row_length="0" Data_length="16384" Max_data_length="0" Index_l
ength="16384" Data_free="9437184" Create_time="2012-09-17 06:57:50" Collation="u
tf8_general_ci" Create_options="" Comment="" />
</table_structure>
</database>
</mysqldump>
Foreign key related information is obviously missing.
[3 Feb 2013 17:43]
MySQL Verification Team
The reason it's missing is that the XML representation comes from the output of "SHOW KEYS FROM 'table'", which is:
mysql> show keys from UserInformation\G
*************************** 1. row ***************************
Table: userinformation
Non_unique: 0
Key_name: PRIMARY
Seq_in_index: 1
Column_name: id
Collation: A
Cardinality: 0
Sub_part: NULL
Packed: NULL
Null:
Index_type: BTREE
Comment:
Index_comment:
*************************** 2. row ***************************
Table: userinformation
Non_unique: 1
Key_name: fk_UserInformation_User1
Seq_in_index: 1
Column_name: userId
Collation: A
Cardinality: 0
Sub_part: NULL
Packed: NULL
Null:
Index_type: BTREE
Comment:
Index_comment:
2 rows in set (0.00 sec)
However, since the required information is available from information_schema, this is a valid feature request.
[21 Feb 2013 23:36]
Evan Cordeiro
You need to explicitly ask for the INFORMATION_SCHEMA database in this case: mysqldump --xml --skip-lock-tables --databases mydatabase INFORMATION_SCHEMA Note: I've used this for introspection, but I haven't tried to rebuild a schema with it. I don't know if it's possible to integrate this data into a rebuild out of the box, and at any rate would certainly require some work if you were rebuilding a schema on a server with multiple databases. from mysqldump page at http://dev.mysql.com/doc/refman/5.5/en/mysqldump.html "mysqldump does not dump the INFORMATION_SCHEMA database by default. mysqldump dumps INFORMATION_SCHEMA only if you name it explicitly on the command line, although currently you must also use the --skip-lock-tables option. Before MySQL 5.5 mysqldump silently ignores INFORMATION_SCHEMA even if you name it explicitly on the command line."
